图像从程序到GPU再到屏幕显示的流程:GPU渲染管线
1. 模型坐标变换
这个阶段主要是将各个物体的建模坐标系转换到世界坐标系。在程序中不同物体他们建模坐标系是不一样,有些适合球坐标有些适合直角坐标。但是为了将他们整合在一起,最终程序需要将他们转换到世界坐标。在游戏里面你开第一人称视角,那就是以你为原点设计了一个建模坐标系,但是你开枪击中别人以及你位于地图哪个位置。这些都是需要转换到世界坐标中统一进行计算。
2. 视图变换
虽然经过步骤1可以把所有物体都转换到统一的世界坐标。但是这些物体在屏幕上显示的只是某个视角的所观察到的。你打游戏开第一人称视角,移动鼠标就能看到不同的场景,不同的角度看到物体所在的位置是不一样的。这个就是视图变换的作用。当然到底要变换到怎样的视角不同的标准中是不一样的。
3. 顶点着色,曲面细分
在前面两个步骤虽然确定了各个物体在视图中的位置。但是并没有确定模型各个点的颜色。这个步骤就需要根据设置的颜色或者光照效果等属性来确定某个顶点的颜色。这个顶点颜色会被后面的光栅化操作使用,因为我们看到的是面而不是顶点。光栅化就是要根据顶点的颜色等属性计算出某个区域的颜色属性。曲面细分就是原先的模型可能就是一些稀疏的顶点构成,需要对这些稀疏的点进行插值。使得点变得更密集。
着色器语言主要是需要显卡提供驱动,一般是适配OpenGL或DirectX的驱动。
着色器语言一般是文本形式,不会对它进行编译。是到运行的时候GPU才编译执行它。
4. 裁剪
屏幕有大小,所以要对图像进行裁剪。只显示适合屏幕大小的图形。
5. 光栅化
6. 片元融合
在步骤5中已经得到了某个区域的颜色和深度值等信息。但是有时候会多个物体相互重合,比如某些透明物体重合。那么我们需要对重合部分进行融合计算。
总结下前面几步的关系,先是得到顶点,然后得到三角形,然后对三角形进行分片。然后对分片着色,最后对重合的片元进行颜色融合。
参考文献:
[1] 计算机图形学