1. Application stage 应用阶段
软件执行、应用驱动、CPU运行
碰撞检测、全局加速算法、动画、物理模拟
- 准备场景数据、模型及光源
- 剔除(Culling):剔除不可见物体,提高性能
- 设置渲染状态 材质、纹理、shader的数据
输出渲染所需的信息,即输出渲染图元(Rendering Primitives)
2. Geometry stage 几何阶段
进行多个多边形和定点的操作
- 模型变换: 物体坐标系→世界坐标系
- 视觉变换: 世界坐标系→相机坐标系
- 顶点Shading: 在不同顶点计算Shading方程,所得结果用于光栅化
Shading:光线在某个材质上产生的效果 - 投影
可视化空间变换至单位立方体(正规可视化空间)
计算正交投影和透视投影,Z坐标不存储在图像中(存在Z-buffer中) - 裁剪
基本图元的顶点出现在可视空间内,视为有效,可以进行光栅化
基本图元只有部分顶点在可视空间会被裁剪(由固定的硬件操作) - 屏幕映射
OpenGL的原点在屏幕左下角
DX的原点在屏幕右上角
DX10之前的版本,像素的中心坐标为(0,0)
DX10之后的版本及OpenGL,像素中心坐标为(0.5,0.5)
3. Rasterizer stage 光栅化阶段
接收数据为变换和投影后的顶点及其相应的Shading方程数据
光栅化的目标: 计算覆盖在每个物体上的像素颜色
- 三角形设置: 三角形表面差异和其他相关数据(由固定的硬件操作)
- 三角形遍历: 检查每个像素是否在三角形内部
Fragment在这里产生,通常采用插值法计算 - 像素Shading: 输入差值Shading的数据,输出一个或者多个颜色用于下一阶段
可编程控制GPU执行,常用纹理技术 - 合并: 合并color buffer中的颜色
可以通过配置产生不同的效果
Z-buffer解决能见度问题、Alpha通道执行Alpha test、stencil buffer记录已渲染图元的位置
网友评论