顶点处理,面处理,光栅化,像素处理
- 顶点处理:进行坐标变换和光照计算。生成可用于渲染到投影空间的顶点坐标、颜色、纹理坐标。通过一系列的坐标系转换,将模型的顶点在摄像机前进行位移,并最终投影到摄像机的投影屏幕上。顶点变换这一阶段包括顶点的坐标变换、逐顶点雾化、材质属性和光照属性处理。
本地坐标系:以模型自己为中心。比如旋转、胳膊的摆动,等是以本地坐标系为参考。
观察坐标系:以摄像机作为原点。
观察坐标系转投影坐标系:将每个物体模型的位置从观察者所在的坐标体系中,转到观察者投影平面上。
包括 面组装 面截取 面剔除
面组装:
通常采用Triangle Strip
面截取 摄像机视角以外的顶点将被截取掉。
面剔除 1.求法线判断
正反面 法线:面的两个向量相乘 结果是与该两个向量垂直的,也就是这个面的法线。
2.视锥剔除:去掉在视锥外的面的部分。(就是距离镜头特别近的和距离镜头特别远的。判断方法:每个物体都有一个距离摄像机距离的Z值。通过硬件提供的深度缓存(Depth Buffer或者Z-Buffer)来判断。
3.遮挡剔除:去掉在覆盖在其他面后面的面的部分。 也需要深度缓存的支持。(深度缓存其实就是一张0-255的图层,每渲染一个像素都会进行当前像素深度值的检测,如果当前像素的深度值小于已经存储的深度值,说明这个像素更靠近摄像头,会把后面的遮盖住,这时候更新深度值为该像素。
- 光栅化:以向量为基本结构的面转换成一个个点阵形式的像素。
- 像素处理:对每个像素区域进行着色,对像素贴上贴图。输入:像素的位置、深度、贴图坐标、法线、切线、颜色等。输出是每个像素的颜色、透明度。
- 完整流程:
所有的渲染管线工作都是在GPU中进行,结果放在显存中,GPU每次输出一个
颜色值,放在
显存里,显存有交换链,显存每次输出一帧,后面一帧进行运算绘制,前面一帧显示完,后面一帧绘制完,进行交换,前面一帧缓存清空,再进行绘制。
固定管线:DX提供的渲染流程,很多地方没办法加入自己的算法,
可编程管线:Shader 可以加入自己的算法