metal纹理坐标与00点是左上角与opengl相反
3d世界物体转换为设备屏幕需要的转换
为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。下面的这张图展示了整个流程以及各个变换过程做了什么:
一个3d世界的物体从 自身坐标 转换为屏幕设备坐标 需要经过三次矩阵转换 Model view project

矩阵相乘顺序
- scale rotate translate
- 矩阵相乘是从后向前
let animatedModelView = matrix_multiply(matrix4x4_translation(translateXAnimationValue / scaleX, translateYAnimationValue / scaleY, 0),matrix4x4_scale(scaleXAnimationValue, scaleYAnimationValue, 1))
projectMatrix
左右下上近远 2d图形处理只需要 正交矩阵
因为图片本身世界的坐标系是 从左到右从下到上

ios系统的坐标系是从左到右从上到下 Y轴正好相反 所以裁剪矩阵建立的时候 要将上下颠倒过来,用以处理图片上下flip的问题
matrixProjection = matrix_ortho(0, Float(renderSize.width), 0, Float(renderSize.height), -1, 1)'
网友评论