图形渲染管线流程

情到浓时终转凉″ 提交于 2020-02-12 18:14:21

博客资料来源《DirectX 9 3D游戏设计入门》

渲染管线流程:本地坐标 ——> 世界坐标 ——> 视图坐标 ——> 背面拣选 ——> 光照 ——> 裁剪 ——>投影变换

——>视口变换——>光栅化

前8个阶段称为T&L阶段(及顶点变换和光照阶段),后面的光栅化阶段为非T&L阶段。

1.本地坐标:
本地坐标是相对于自身坐标系的坐标,自身坐标系又叫做建模空间,这是我们定义物体的三角形列的坐标系。自身坐标系简化了建模的过程。在物体自己的坐标系中建模比在世界坐标系中直接建模更容易。例如,在自身坐标系中建模不像在世界坐标系中要考虑本物体相对于其他物体的位置、大小、方向关系。

2.世界坐标:
一旦我们构造了各种模型,它们都在自己的自身坐标系中,但是我们需要把它们都放到同一个世界坐标系中。物体从自身坐标系到世界坐标系中的换叫做世界变换。世界变换通常是用平移、旋转、缩放操作来设置模型在世界坐标系中的位置、大小、方向。世界变换就是通过各物体在世界坐标系中的位置、大小和方向等相互之间的关系来建立所有物体。

3.视图坐标:
世界坐标系中的几何图与照相机是相对于世界坐标系而定义的。然而在世界坐标系中当照相机是任意放置和定向时,投影和其它一些操作会变得困难或低效。为了使事情变得更简单,我们将照相机平移变换到世界坐标系的源点并把它的方向旋转至朝向Z轴的正方向,当然,世界坐标系中的所有物体都将随着照相机的变换而做相同的变换。这个变换就叫做视图坐标系变换

4.背面拣选:
一个多边形有两个表面,我们将一个标为正面,一个为背面。通常,后表面总是不可见的,这是因为场景中大多数物体是密封的。例如盒子、圆柱体、箱子、characters等,并且我们也不能把照相机放入物体的内部。因此照相机永不可能看到多边形的背面。这是很重要的,如果我们能看背面,那么背面拣选就不可能工作。

5.光照:
光源定义在世界坐标系中然后被变换到视图坐标系中。视图坐标系中光源给物体施加的光照大大增加了场景中物体的真实性。

6.裁剪:
我们拣选那些超出了可视体范围的几何图形的过程就叫做裁剪。这会出现三种情况:

  1. 完全包含——三角形完全在可视体内,这会保持不变,并进入下一级
  2. 完全在外——三角形完全在可视体外部,这将被拣选
  3. 部分在内(部分在外)——三角形一部分在可视体内,一部分在可视体外,则三角形将被分成两部分,可视体内的部分被保留,可视体之外的则被拣选

7.投影变换:
视图坐标系的主要任务就是将3D场景转化为2D图像表示。这种从n维转换成n-1维的过程就叫做投影。投影的方法有很多种,但是我们只对一种特殊的投影感兴趣,那就是透视投影。因为透视投影可以使离照相机越远的物体投影到屏幕上后就越小,这可以使我们把3D场景更真实的转化为2D图像。

8.视口变换:
视口变换主要是转换投影窗口到显示屏幕上。通常一个游戏的视口就是整个显示屏,但是当我们以窗口模式运行的时候,也有可能只占屏幕的一部分或在客户区内。

9.光栅化:
在经过T&L变换后,我们得到了每个三角形的各顶点信息。光栅化是计算需要显示的每个三角形中的每个点颜色值,即最终绘制出这个三角形或者说绘制出整个图形。光栅化过程是非常繁重的计算,它应该通过硬件图形处理来完成。它的处理结果就是把2D图象显示在显示器上。

有关光栅化的具体介绍:
https://blog.csdn.net/Albert_Ejiestein/article/details/90664631

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!