多数渲染系统有极大的共性,图形管道伪代码可以说明带有光照的单个图象的渲染过程,这样会对渲染过程有一个整体认识。
图形管道伪代码
1 //设置场景:渲染的出发点——视点,输出——视图,设置光照和雾化 2 //设置观察场景的方式——摄像机 3 setupTheCamera(); 4 //清除深度缓冲 5 clearZBuffer(); 6 //设置光源和雾化 7 setGlobalLightingAndFog(); 8 //得到可见物体列表 9 visibleObjList = visibleDetermination(scene); 10 //开始渲染 11 for (obj in visibleObjList) { 12 //使用包围体执行VSD检测 13 if (!obj.isBoundingVisible()) continue; 14 trimesh = obj.getGeometry(); 15 for (triangle in trimesh){ 16 //变换顶点到裁剪空间,执行顶点级别光照 17 clipSpaceTriangle = transformAndLighting(triangle); 18 //背面剔除 19 if (clipSpaceTriangle.isBackFacing()) continue; 20 //视锥体裁剪 21 clippedTriangle = clipToViewVolume(clipSpaceTriangle); 22 if (clippedTriangle.isEmpty()) continue; 23 //三角形投影至屏幕坐标,并且光栅化 24 clippedTriangle.projectToScreenSpace(); 25 for (pixel in triangle) { 26 //插值颜色,z-Buffer和纹理纹理映射坐标 27 //执行z-Buffer和alpha检测 28 if (!zbufferTest()) continue; 29 if (!alphaTest()) continue; 30 //像素着色 31 color = shadePixel(); 32 //写内容到帧缓冲区 33 writePixel(color, interpolatedZ); 34 } 35 } 36 }
渲染管线
渲染管线流程图:
渲染过程示意图