总结下iOS和OpenGL里的矩阵计算
iOS (Core Graphics)
iOS里面的矩阵用行向量表示,所以是矩阵右乘向量.
以Quartz 2D
举例平移,因为是2d所以是一个3x3的矩阵,3d就是4x4
补充:有朋友问我这里为什么变成了3x3的矩阵?3d则是4x4?
这里使用的齐次坐标。图形学引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p' = p*M的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。
[xy1]⋅a c txbdty001=[ax+cy+txbx+dy+ty1]
所以CGAffineTransform CGAffineTransformMakeTranslation ( CGFloat tx, CGFloat ty );
是上面的公式中的
a=d=1
和b=c=0
也就是矩阵
1 0 tx01ty001
如果我们把这个公式用于3d 则是CATransform3D
[xyz1]⋅m11 m21 m31 m41m12m22m32m42m13m23m33m43m14m24m34m44=[x′y′z′1]
m34
可以影响投影矩阵设置为d−1表示向z=d
的平面进行透视投影
OpenGL
OpenGL使用列向量表示,所以是矩阵左乘向量.
a e i mbfjncgkodhlp⋅x y z w=ax+by+cz+dw ex+fy+gz+hw ix+jy+kz+lw mx+ny+oz+pw
OpenGL的透视投影计算可以参考这篇文章