常见问题 开发软件的常见问题>>

我如何使用模板缓冲区来描绘阴影量?

发布时间:2010-11-23 15:25:15

答案:

这一效果以及其它体积模板缓冲区效果的关键在于模板缓冲区和 z 缓冲区之间的交互作用。带有阴影量的场景是分三个阶段描绘的。首先,照常使用 z 缓冲区来描绘没有阴影的场景。然后,在模板缓冲区中将阴影标出,如下所示。使用不可见的多边形绘制阴影量的正面,其中 z 测试被启用,而 z 写入被禁用,且在每有一个像素通过 z 测试时,就将模板缓冲区增加一次。以同样方式描绘阴影量的背面,但是要减少模板值。
现在,请考虑单独一个像素的情形。假设摄像机不在阴影量中,场景中的相应点就有有四种可能性。如果从摄像机到点的光线不与阴影量相交,则不会绘制任何的阴影多边形,而模板缓冲区依旧为零。否则,如果点在阴影量的前面,则阴影多边形会被输出 z 缓冲区,而模板依旧保持不变。如果点位于阴影量下面,则会描绘同样多的正面阴影,而模板为零,即增加的次数与减少的次数一样多。
最后一种可能性就是点位于阴影量中。在这种情况下,阴影量的背面会被输出 z 缓冲区,但正面则不然,因而模板缓冲区会为非零。结果就是,帧缓冲区位于阴影中的一些部分具有非零的模板值。最后,要实际描绘阴影,整个场景会被一个 alpha 混色的多边形集充溢一遍,其中仅模板值非零的像素受到影响。在随 DirectX SDK 一起提供的 “Shadow Volume”示例中有关于该技巧的一个示例。

本FAQ适用范围

下一步您可以:
查看开发软件产品 >>