您的位置:首页 > 其它

3D渲染管线的概述

2010-04-14 10:09 344 查看
渲染管线简介:是用来创建一个几何描述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数学基础》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: