渲染管线简介:是用来创建一个几何描述3D世界的2D图像,和一个确定这个3D世界中哪一部分将被透视投影到屏幕上的虚拟摄像机。
作用:将3D场景用几何学表现出来以及用它来产生2D图像。
简化的渲染管线流程:
参考《3D游戏编程基础(DirectX9.0)》
详细图像管线流程:
伪代码描述:
// 首先,设置观察场景的方式setupTheCamera();// 清楚z-缓冲clearZBuffer();// 设置环境光源和雾化setGlobalLightingAndFog();// 得到可见物体列表potentiallyVisibleObjectList = highLevelVisibilityDetermination(scene);// 渲染它们for (all objects in potentiallyVisibleObjectList) { // 使用包围体方法执行低级别VSD检测 if (!object.isBoundingVolumeVisible()) continue; // 提取或者渐进式生成几何体 triMesh = object.getGeometry(); // 裁剪和渲染面 for (each triangle in the geometry) { // 变换顶点到裁剪空间,执行顶点级别光照 clipSpaceTriangle = transformAndLighting(triangle); // 三角形为背向的? if (clipSpaceTriangle.isBackFacing()) continue; // 对视锥裁剪三角形 clippedTriangle = clipToViewVolume(clipSpaceTriangle); if (clippedTriangle.isEmpty()) continue; // 三角形投影至屏幕空间,并且光栅化 clippedTriangle.projectToScreenSpace(); for (each pixel in the triangle) { // 插值颜色,z-缓冲值和纹理映射坐标 // 执行zbuffering和alpha检测 if (!zbufferTest()) continue; if (!alphaTest()) continue; // 像素着色 color = shadePixel(); // 写内容到帧缓冲和z-缓冲 writePixel(color, interpolatedZ); } }}
参考《3D数学基础》