坐标系统
标准化设备坐标(Normalized Device Coordinate, NDC):x, y, z介于[-1.0, 1.0]
坐标转换流局部空间(Local Space,物体空间Object Space)
世界空间(World Space)
观察空间(View Space,视觉空间Eye Space)
裁剪空间(Clip Space)
屏幕空间(Screen Space)
模型矩阵是一种转换矩阵,它能通过对对象进行平移、缩放、旋转来将它置于它本应该在的位置或方向。世界坐标原点(0, 0, 0),变换时将本地坐标系在世界坐标系变换。
观察空间,可形象的视为OpenGL的摄像机,通过观察矩阵(平移和旋转的组合)将对象的世界坐标转换为观察者视野前的坐标。
投影矩阵创建的观察区域为视锥体(Frustum),视锥体范围内的坐标会最终出现在用户的屏幕上,此过程称为投影(Projection),之后经过透视划分(Perspective Division)操作将四维裁剪空间坐标转换为三维标准化设备坐标。
正射投影:Orthographic Projection。
正射投影以上视锥体近似为立方体,定义了由宽,高,近平面,远平面决定的可视坐标系。任何出现在近平面前面或远平面后面的坐标都会被裁剪掉。
透视投影:Perspective Projection
透视投影FOV(Field of View):视野,表示观察的空间的大小。FOV越大,相同位置的物体的在投影屏幕上越小。
正射投影和透视投影区别正射投影的每个顶点和观察者的距离是一样的。
顶点坐标到裁剪坐标:
从右往左依次计算OpenGL是右手坐标系,但在标准化设备坐标系中是左手坐标系(DirectX也是)。
右手坐标系Z缓冲区:OpenGL存储所有深度信息于Z缓冲区(Z-Buffer)中,即深度缓冲区(Depth Buffer)。深度存储在每个片段里面(作为片段的z值)。当片段像输出它的颜色时,OpenGL会将它的深度值和z缓冲进行比较然后如果当前的片段在其它片段之后它将会被丢弃,然后重写。这个过程称为深度测试(Depth Testing)并且它是由OpenGL自动完成的。
图片和一些文字来源于https://learnopengl-cn.github.io,本人收集作为笔记,如有侵权,望告知