3D数学-正交投影

  • Post author:
  • Post category:其他






3D数学-正交投影

好记性不如烂笔头啊,还是记录一下!




概述

正交投影也被称为平行投影,不会出现透视投影的

近大远小

的扭曲现象,




正交投影的推导

构建正交投影矩阵相对来说会简单一些,由于不存在透视扭曲。




<

x

e

,

y

e

,

z

e

>

<x_{e}, y_{e}, z_{e}>






<









x











e



















,





y











e



















,





z











e





















>





是相机空间中的一个坐标点




<

x

n

,

y

n

,

z

n

>

<x_{n}, y_{n}, z_{n}>






<









x











n



















,





y











n



















,





z











n





















>





表示经过透视投影后在

规范化设备坐标系(Normalized Device Coordinates)

中的坐标




l

l






l





表示

近裁剪平面(near clip plane)

的左边,即



x

=

l

x=l






x




=








l







r

r






r





表示

近裁剪平面(near clip plane)

的右边,即



x

=

r

x=r






x




=








r







t

t






t





表示

近裁剪平面(near clip plane)

的上边,即



y

=

t

y=t






y




=








t







b

b






b





表示

近裁剪平面(near clip plane)

的下边,即



y

=

b

y=b






y




=








b




avatar

如图所示,



<

x

e

,

y

e

,

z

e

>

<x_{e}, y_{e}, z_{e}>






<









x











e



















,





y











e



















,





z











e





















>





可以先行的映射到

规范化设备坐标系(Normalized Device Coordinates)

中的,因为我们实际只是将一个长方体缩成一个立方体,并把它移动到原点。下面我们就来使用

线性映射关系(linear relationship)

来推导正交投影矩阵

现在需要将



x

e

x_{e}







x











e






















映射到



x

n

x_{n}







x











n


























x

e

x_{e}







x











e






















得范围是



[

l

,

r

]

[l, r]






[


l


,




r


]









x

n

x_{n}







x











n






















的范围是



[

1

,

1

]

[-1, 1]






[





1


,




1


]





,还需要将



y

e

y_{e}







y











e






















映射到



y

n

y_{n}







y











n


























y

e

y_{e}







y











e






















得范围是



[

b

,

t

]

[b, t]






[


b


,




t


]









y

n

y_{n}







y











n






















的范围是



[

1

,

1

]

[-1, 1]






[





1


,




1


]





,还需要将



z

e

z_{e}







z











e






















映射到



z

n

z_{n}







z











n






















,由于齐次裁剪空间为左手坐标系,所以需要将z轴反置,因此



z

e

z_{e}







z











e






















的范围是



[

n

,

f

]

[-n, -f]






[





n


,







f


]









y

n

y_{n}







y











n






















得范围是



[

1

,

1

]

[-1, 1]






[





1


,




1


]





可以利用简单线性插值的方法获得以下关系式:





{

x

e

l

r

l

=

x

n

(

1

)

1

(

1

)

y

e

b

t

b

=

y

n

(

1

)

1

(

1

)

z

e

(

n

)

(

f

)

(

n

)

=

z

n

(

1

)

1

(

1

)

\begin{cases} \frac{x_{e}-l}{r-l}=\frac{x_{n}-(-1)}{1-(-1)} \\[2ex] \frac{y_{e}-b}{t-b}=\frac{y_{n}-(-1)}{1-(-1)} \\[2ex] \frac{z_{e}-(-n)}{(-f)-(-n)}=\frac{z_{n}-(-1)}{1-(-1)} \end{cases}



















































































































































r





l

















x











e






















l























=
















1





(





1


)

















x











n






















(





1


)







































t





b

















y











e






















b























=
















1





(





1


)

















y











n






















(





1


)







































(





f


)





(





n


)

















z











e






















(





n


)























=
















1





(





1


)

















z











n






















(





1


)












































解出可得:





{

x

n

=

2

r

l

x

e

r

+

l

r

l

y

n

=

2

t

b

y

e

t

+

b

t

b

z

n

=

2

f

n

z

e

f

+

n

f

n

\begin{cases} x_{n}=\frac{2}{r-l} \centerdot x_{e}-\frac{r+l}{r-l} \\[2ex] y_{n}=\frac{2}{t-b} \centerdot y_{e}-\frac{t+b}{t-b} \\[2ex] z_{n}=\frac{-2}{f-n} \centerdot z_{e}-\frac{f+n}{f-n} \end{cases}








































































































































x











n





















=
















r





l
















2





























x











e






































r





l
















r


+


l




























y











n





















=
















t





b
















2





























y











e






































t





b
















t


+


b




























z











n





















=
















f





n



















2





























z











e






































f





n
















f


+


n












































将以上三个关系式写成矩阵形式,可得:





P

n

=

M

o

r

t

h

o

P

e

=

[

2

r

l

0

0

r

+

l

r

l

0

2

t

b

0

t

+

b

t

b

0

0

2

f

n

f

+

n

f

n

0

0

0

1

]

[

x

e

y

e

z

e

1

]

P_{n} = M_{ortho} \cdot P_{e} = \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & \frac{r+l}{r-l} \\[2ex] 0 & \frac{2}{t-b} & 0 & \frac{t+b}{t-b} \\[2ex] 0 & 0 & \frac{-2}{f-n} & -\frac{f+n}{f-n} \\[2ex] 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} x_{e} \\[2ex] y_{e} \\[2ex] z_{e} \\[2ex] 1 \end{bmatrix}







P











n





















=









M











o


r


t


h


o































P











e





















=


























































































































r





l
















2



























0








0








0





























0




















t





b
















2



























0








0





























0








0




















f





n



















2



























0









































r





l
















r


+


l







































t





b
















t


+


b










































f





n
















f


+


n



























1

































































































































































































































x











e


























y











e


























z











e

























1





















































































































M

o

r

t

h

o

M_{ortho}







M











o


r


t


h


o






















就是

正交投影矩阵




投影矩阵的另一种形式

avatar

根据

Size(竖直方向上高度的一半)



Aspect(投影平面的宽高比)

可得出以下关系:





A

s

p

e

c

t

=

r

t

t

=

S

i

z

e

b

=

t

r

=

t

×

A

s

p

e

c

t

l

=

r

Aspect = \frac{r}{t} \\[2ex] t = Size \\[2ex] b = -t \\[2ex] r = t \times Aspect \\[2ex] l = -r






A


s


p


e


c


t




=



















t














r


























t




=








S


i


z


e








b




=











t








r




=








t




×








A


s


p


e


c


t








l




=











r





所以



M

o

r

t

h

o

M_{ortho}







M











o


r


t


h


o






















还可以写成:





M

o

r

t

h

o

=

[

1

A

s

p

e

c

t

S

i

z

e

0

0

0

0

1

S

i

z

e

0

0

0

0

2

f

n

f

+

n

f

n

0

0

0

1

]

M_{ortho}= \begin{bmatrix} \frac{1}{Aspect \centerdot Size} & 0 & 0 & 0 \\[2ex] 0 & \frac{1}{Size} & 0 & 0 \\[2ex] 0 & 0 & \frac{-2}{f-n} & -\frac{f+n}{f-n} \\[2ex] 0 & 0 & 0 & 1 \end{bmatrix}







M











o


r


t


h


o





















=


























































































































A


s


p


e


c


t





S


i


z


e
















1



























0








0








0





























0




















S


i


z


e
















1



























0








0





























0








0




















f





n



















2



























0





























0








0























f





n
















f


+


n



























1


















































































































本节教程就到此结束,希望大家继续阅读我之后的教程。

谢谢大家,再见!



饮水思源

参考文献:


《3D游戏与图形学中的数学方法》


《OpenGL投影矩阵(Projection Matrix)构造方法》


版权声明:原创技术文章,撰写不易,转载请注明出处!



版权声明:本文为qq_20309931原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。