渲染管线

应用阶段、几何阶段和光栅阶段。

应用阶段

主要是CPU与内存打交道,例如碰撞检测,计算好的数据(顶点坐标、法向量、纹理坐标、纹理)就会通过数据总线传给图形硬件 。

几何阶段(Geometry Stage)

这个阶段也被称为“变换和光照”阶段。为了从3D场景转换到2D,场景中的所有物体都需要转换到几个空间。每个空间都有自己的坐标系。这些转换是通过一个空间的顶点转换到另一个空间的顶点来实现的。
坐标系变换:物体坐标系、世界坐标系、相机坐标系。
转换剪切空间,并通过图元装配,组装成图元(primitive,三角形或线)。当物体在视体的外,说明我们不需要渲染这个物体,所以就简单丢弃它。当一个物体有部分在视体内,我们需要进行剪切,同时生成新的顶点。新顶点具有适当的的纹理坐标和颜色坐标。
接着我们执行透视分割操作,其实就是实现了一个投影变换,把”近大远小“的效果实现出来。把一个视体转换为归一化的立方体。这个立方体的坐标范围:x和y在-1和1之间,z在0和1之间。同时视体内的物体也一同进行缩放。这样一来得到的立方体,便于裁剪操作,也便于将来投影到平面(立方体只需要“扁平化”)。
最后,我们转换到屏幕空间。执行的操作:根据窗口大小将x和y坐标缩放到合适的坐标,这样就得到2D图片了。(请注意,顶点的z坐标会保留,用于以后的深度操作)
光照(lighting),是这个阶段的另一个主要部分。是使用物体表面的法向量来计算的。通过摄像机的位置和光源的位置,可以计算出给定顶点的光照属性。

光栅阶段(Rasterization Stage)

渲染的最后一个阶段是光栅化,这个阶段的工作就是将已经准备好的数据在屏幕上显示出来。实际过程中,模型经过转换到视口空间之后,GPU会计算出每个像素的深度、像素的颜色、插值得出的纹理坐标、像素位置等数据。这些数据会被用来测试可见性,并且最终绘制到图像缓冲区。

参考

https://www.jianshu.com/p/923f061206ad
https://blog.csdn.net/nikoong/article/details/79776873

原文地址:https://www.cnblogs.com/code-fun/p/15429129.html