3D数学之坐标空间

坐标空间的变换

渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转化到屏幕上的过程。

主要涉及到的坐标空间变换如下图:

 

 

坐标空间

模型空间(对象空间或局部空间)

  • 模型空间的原点和坐标轴通常是有美术人员在建模软件里确定好的。
  • 可以在顶点着色器中访问到模型的顶点信息。

 

世界空间

世界空间的原点放置在游戏空间的中心。

 

观察空间(摄像机空间)

观察空间是摄像机的模型空间,是模型空间的一个特例。

 

裁剪空间

主要是使用投影矩阵对在观察空间的顶点变换到裁剪空间,为后面在屏幕空间进行齐次除法做准备。

  • 透视投影
  • 正交投影

透视投影示意图:

正交投影示意图:

 

投影矩阵的目的:

  • 为投影做准备(经过投影矩阵的变换后,顶点的w分量将会具有特殊的意义)
  • x,y,z分量进行缩放(直接使用视锥体的6个裁剪面进行裁剪比较麻烦)

 

投影结果:

若变换后得到的顶点\left ( x,y,z,w \right )满足以下条件:

  1. -w\leq x\leq w
  2. -w\leq y\leq w
  3. -w\leq z\leq w

则原顶点位于裁剪空间内,证明如下:

我们最终的目的是将顶点转换为归一化设备坐标\left ( {x}',{y}',{z}' ,1\right ),从而满足如下条件就说明该顶点在视锥体内,

  1. -1\leq {x}'}\leq 1
  2. -1\leq {y}'\leq 1
  3. -1\leq {z}'\leq 1

在投影矩阵的推导过程中(见https://mp.csdn.net/postedit/88760626),为了计算出投影矩阵将计算得到的归一化设备坐标\left ( {x}',{y}',{z}' ,1\right )各乘以原来的z坐标,从而有

  1. -z\leq {x}'z}\leq z
  2. -z\leq {y}'z\leq z
  3. -z\leq {z}'z\leq z
  4. w=z

  1. -w\leq {x}'z}\leq w({x}'z就是裁剪空间下的x坐标)
  2. -w\leq {y}'z\leq w({y}'z就是裁剪空间下的y坐标)
  3. -w\leq {z}'z\leq w({z}'z就是裁剪空间下的z坐标)

 

屏幕空间

真正的投影,把视锥体投影到屏幕空间(二维空间)。

步骤:

  1. 进行标准齐次出发(透视除法),即用齐次坐标系的wx,y,z分量,最终得到归一化的设备坐标(NDC)
  2. 根据变换后的xy坐标来映射输出窗口的对对应像素坐标,公式如下:                   

Screen_{x} = \frac{x\times pixedWidth}{2\times w}+\frac{pixedWidth}{2} 

Screen_{y} = \frac{y\times pixedHeight}{2\times w}+\frac{pixedHeight}{2}

注:pixedWidthpixedHeight分别表示屏幕宽高,z分量会被用于深度缓冲。

 

齐次除法示意图:

 

 

坐标空间的变换计算过程

已知子坐标空间\boldsymbol{C}的3个坐标轴在父坐标空间\boldsymbol{P}下的表示\mathbf{x}_{c}\mathbf{y}_{c}\mathbf{z}_{c},以及其原点位置\mathbf{o}_{c},子坐标空间\boldsymbol{C}到父坐标空间\boldsymbol{P}的转换矩阵为M_{c\rightarrow p},则

M_{c\rightarrow p} = \begin{bmatrix} \mid & \mid& \mid& \mid\\ \boldsymbol{x_{c}}& \boldsymbol{y_{c}} & \boldsymbol{z_{c}}& \boldsymbol{o_{c}}\\ \mid& \mid& \mid& \mid\\ 0& 0& 0&1 \end{bmatrix}

即把3个坐标轴依次放入矩阵的前3列,把原点矢量放到最后一列,再用1和0填充。

注:

  • 只变换方向(如法线方向、光照方向),则可以只取前3行前3列来进行变换。
  • 可以求得逆矩阵M_{p\rightarrow c},即可以通过变换矩阵来得到坐标空间\boldsymbol{P}下坐标轴和原点在另一个坐标系\boldsymbol{C}下的表示。
  • 特别的,如果转换矩阵M_{c\rightarrow p}为正交矩阵,可以提取第一列来得到坐标空间\boldsymbol{P}x轴在坐标空间\boldsymbol{C}下的表示,可以提取第一行来得到坐标空间\boldsymbol{C}x轴在坐标空间\boldsymbol{P}下的表示,这是通过正交矩阵的逆矩阵等于转置矩阵得到的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值