3D渲染管线的概述

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

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

简化的渲染管线流程:

2010041410154179.jpg

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

 

详细图像管线流程:

2010041611385434.gif

 

伪代码描述:

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值