坐标系统

2017-01-07  本文已影响0人  龙遁流

 标准化设备坐标(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,本人收集作为笔记,如有侵权,望告知


上一篇下一篇

猜你喜欢

热点阅读