1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 渲染管线中几种基础的坐标空间(对象空间 世界空间 相机空间(观察空间) NDC空间

渲染管线中几种基础的坐标空间(对象空间 世界空间 相机空间(观察空间) NDC空间

时间:2019-04-05 11:51:40

相关推荐

渲染管线中几种基础的坐标空间(对象空间 世界空间 相机空间(观察空间) NDC空间

对象空间

每个模型都有一个其本身的坐标系,比如以它的几何中心为这个空间的坐标原点,这个模型所有顶点的位置属性都是相对于这个原点的坐标值。因此我们称这个空间为对象空间(局部空间)

世界空间

我们要把那个模型放入我们的游戏世界中,就要对其应用一个Model矩阵,model就是对模型做移动、旋转、缩放变换,变换后模型就以一种特定的角度、大小、位置放置在世界空间中了。

观察空间

渲染管线就是从三维空间中经过一系列计算、操作最终得到一张二维图像的过程。世界空间中,现在有着相机和我们摆放的模型,为了正确的得到相机所看到的图像,但是又想计算更方便,用很小的代价把相机移动到原点并且看向-z轴,头顶着y轴,x指向相机的右方(这是几种流行图形接口所定义的),记录这种变换为view矩阵(包含移动、旋转),接着对所有其他模型做相同的view变换。这样可以让相机和模型们都是相对静止的。相机所看到的内容,跟view变换之前的没有任何区别。而这时,在世界中,相机和模型的绝对位置和朝向其实都变了,而这种以相机为原点,相机前方为-z、头顶y、右x的坐标空间就叫做观察空间,以上这是在101课程中听到的一种view变换的理解方法。

还能这样理解view变换:

view矩阵是将物体从一个坐标系换到另一个坐标系的媒介。位于世界空间的所有物体,它的坐标都是相对于世界原点而言的。做view变换之后,物体变为了以相机为原点,相机正前方向为-z轴,头顶为正y轴,右方为正x轴的坐标系来表示了

裁剪空间

此时整个世界的模型都处于观察空间中,然而相机是有一定的可视范围的,这个范围我们用一个视椎体来定义。所有在视椎体内部的对象是相机可见的(可以最终显示到屏幕上),而视椎体外部则不可见(剔除)。如下图所示,只有内部的两个小球能被相机看到并显示在屏幕上。

为了分辨谁可见谁不可见,对观察空间的所有模型顶点,应用一个透视投影Perspective矩阵,将所有的顶点变换到裁剪空间内。实际上在OpenGL中,矩阵计算是在顶点着色器中进行的,顶点着色器的输出gl_Position就是顶点位于裁剪空间内的坐标值,如果顶点在视椎体内,则他的xyz分量值域为[-w,w]。如果有任何一个分量绝对值超过w,则这个顶点会被裁剪不会在屏幕中出现。w分量在MVP变换前,被指定为1,经过MVP变换后,w值记录的是变换前的实际深度值。

标准化设备空间NDC

顶点着色器执行完后,会自动进行透视除法,顶点三个分量都除以w分量,转换到标准化设备空间NDC-space,所有的坐标归一化,落在[-1,1]的范围内。这一步是近大远小的关键(远的顶点w分量更大,对所有分量除以w后,这个模型就会更小,同样的近处的物体则会比较大)

屏幕空间

然后应用视口变换矩阵(viewport matrix)把这些位于[-1,1]的所有顶点平移、缩放到屏幕空间中。其实屏幕空间就是 以(0,0)为原点,y轴上为正,x轴右为正的坐标系中。坐标范围就是显示器的分辨率大小

渲染管线中几种基础的坐标空间(对象空间 世界空间 相机空间(观察空间) NDC空间 裁剪空间 屏幕空间)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。