OpenGL中的坐标系统:https://zhuanlan.zhihu.com/p/354200548
NDC:Normalized Device Coordinates。所谓的PerspectiveProjection 其实就是将顶点从view 坐标系下,转换到NDC下(https://zhuanlan.zhihu.com/p/25095708?utm_medium=social)NDC是什么坐标系?应该是裁剪坐标系吧?裁剪坐标系除以w等于NDC坐标。参考:https://zhuanlan.zhihu.com/p/65969162?utm_id=0。Clip Space是一个顶点乘以MVP矩阵之后所在的空间,Vertex Shader的输出就是在Clip Space上(划重点),接着由GPU自己做透视除法将顶点转到NDC。
- 世界坐标系:世界坐标系是始终固定不变的,OpenGL使用右手坐标系。
- 对象坐标系:用于建模的坐标系,当模型建立好之后需要对模型进行model变换,才能将模型变换到世界坐标系的对应位置中。
- 相机坐标系:model变换是将对象坐标系变换到世界坐标系中,view变换是将世界坐标系变换到相机坐标系也就是eye coordinates,通过view变换,可以将场景与我们的观察位置对应起来。
- 裁剪坐标系:要讲模型顶点的坐标变换到[-1,1]中,也就需要进行归一化设备坐标以及投影变换。投影变换不仅定义了视域体,还定义了如何将顶点投影到屏幕上。投影变换分为透视投影和正交投影,透视投影的视域体是一个视锥,而正交投影的视域体是一个长方体。
- 屏幕坐标系:屏幕上的设备坐标称为屏幕坐标,又被称为物理坐标,是指输出设备上的坐标。需要将归一化后的坐标变换到相应的屏幕坐标上。