3D渲染管线的概述

渲染管线简介:是用来创建一个几何描述3D世界的2D图像,和一个确定这个3D世界中哪一部分将被透视投影到屏幕上的虚拟摄像机。

作用:将3D场景用几何学表现出来以及用它来产生2D图像。

简化的渲染管线流程:

3D渲染管线的概述_第1张图片

参考《3D游戏编程基础(DirectX9.0)》

 

详细图像管线流程:

3D渲染管线的概述_第2张图片

 

伪代码描述:

 

// 首先,设置观察场景的方式
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数学基础》

转载于:https://www.cnblogs.com/keokeo/archive/2010/04/14/1711600.html

你可能感兴趣的:(3D渲染管线的概述)