主要是学习过程中的要点总结,学习渠道为:https://learnopengl-cn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/
要点:
1.OpenGL在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(NDC)。也就是说x,y,z轴的值都会在[-1,1]之间。超过范围的都不可见!
2.如果图元需要被裁剪。则OpenGL会重新构建这个三角形为一个或多个三角形让其能够适合这个裁剪范围。
3.将坐标变换为标准化设备坐标,接着再转化为屏幕坐标
4.坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。
5.局部空间:局部空间是指物体所在的坐标空间,即对象最开始所在的地方。[抽象一个点为(0,0,0)在此基础上画一个边长为1的正方体。(0,0,0)就是你的物体中心。它的顶点为(1,0,0),(-1,0,0),(0,1,0),(0,-1,0),(0,0,1),(0,0,-1)]
6.世界空间:顶点相对于(游戏)世界的坐标。可以通过模型矩阵来操作。模型矩阵是一种变换矩阵,它能通过对物体进行位移、缩放、旋转来将它置于它本应该在的位置或朝向[比如我现在有两个上述正方体,分别把它摆在世界坐标的(1,0,0)和(-1,0,0)]
7.观察空间:观察空间是将世界空间坐标转化为用户视野前方的坐标而产生的。通常观察空间的变化规则存储在一个观察矩阵(View Matrix)里[]
8.裁剪空间:由由投影矩阵决定裁剪范围。投影矩阵会将坐标变换为[-1.0,1.0]的坐标。
操作:
组合模型矩阵、观察矩阵和投影矩阵:
注意:注意矩阵运算的顺序是相反的(记住我们需要从右往左阅读矩阵的乘法)。