CGMath实践

在CGMath中实现如下封装:

三维坐标绕xyz轴旋转变换

3D Transforms 3维变换

3维坐标齐次化
  • 点齐次坐标末尾为1,表示可以参与平移变换

ph=[xyz1]

3维向量齐次化
  • 向量齐次坐标末尾为0,表示不受平移影响

vh=[uvw0]

缩放因子w

(x,y,z,w)(xw,yw,zw)

  • w是齐次坐标的缩放因子
    • w=1:表示标准齐次坐标
    • w≠1:通过除以w归一化得到实际坐标
  • 透视投影中,w通常表示深度
3维齐次坐标
3维齐次坐标
3维仿射变换公式

[xyz1]=[a11a12a13txa21a22a23tya31a32a33tz0001][xyz1]{x=a11x+a12y+a13z+txy=a21x+a22y+a23z+tyz=a31x+a32y+a33z+tz1=1

3维仿射变换公式
3维仿射变换公式

3D Rotation 三维旋转

Rx(α)=[10000cosα-sinα00sinαcosα00001]

Ry(β)=[cosβ0sinβ00100-sinβ0cosβ00001]

Rz(γ)=[cosγ-sinγ00sinγcosγ0000100001]

围绕xyz轴进行旋转变换
围绕xyz轴进行旋转变换
Compose 3D Rotation 欧拉角公式

R=Rz(γ)×Ry(β)×Rx(α)

三维空间中任意旋转,都可以拆解成围绕x、y、z轴旋转的组合:

  • ZYX(Roll-Pitch-Yaw)常用于飞行器姿态
  • XYZ:常见顺序
三维旋转的拆解
三维旋转的拆解

ZYX顺序常用于飞行器姿态的表示:

  • Roll:绕x轴翻滚
  • Pitch:绕y轴升降
  • Yaw:绕z轴偏航
Rodrigues' Rotation Formula 罗德里格斯公式

将旋转α角度,拆分成围绕任意轴的旋转

  • 表示绕任意旋转轴α旋转角度
  • 不需要分解为绕坐标轴的旋转
  • 适用于任意旋转轴,比欧拉角更通用
  • 常用于旋转插值和旋转表示

K=[0-nznynz0-nx-nynx0]

R=I+sin(θ)K+(1-cos(θ))K2

罗德里格斯公式
罗德里格斯公式

Viewing Transformation 观测变换

观测变换的目的

将视角观测到的三维世界转换为二维平面

Viewing Projection
Viewing Projection
MCP变换

Model

placing objects
在空间中摆放物体

View

placing camera
挑选合适的视角

Projection

拍摄

  • 长焦 Orthographic
  • 广角 Perspective

View/Camera Transformation 视图变换

ModelViewTransformation 模型视图矩阵

Projection Transformation 投影变换

Orthographic Projection 透视投影

Frustum 透视投影视锥的定义