6

让我在房间的中心有一些网格(例如球体),里面装满了立方体和一个光源。如何仅使用“标准”(固定)功能在 OpenGL 中快速轻松地进行阴影投射?注意:结果还必须包含立方体和球体阴影。

4

3 回答 3

4

如果您可以生成球体的轮廓,那么您可以使用shadow volumes。nVidia 硬件也支持固定功能阴影映射很长一段时间。

阴影体积的缺点是填充率要求非常高。阴影贴图可以更好,但需要额外的通过。

如果您要投影到一个平面上,那么将对象投影到一个平面上可能会更容易。

于 2010-11-21T12:48:54.397 回答
2

没有快速简便的方法。有很多不同的技术,每个都有自己的优点和缺点。您可以查看我在 github 上托管的一个项目,该项目使用非常简单的代码来创建阴影,使用阴影体积技术 (http://iuiz.github.com/VolumeShadow/)。然而,它是用 Java 编写的,但将其移植到任何其他语言应该不难。

创建阴影最重要的方法是所谓的“阴影映射”方法,您可以将场景(将相机放在光源处,指向每个阴影投射对象)渲染到纹理。第二种技术是 shadow voulume 方法(以 Doom3 闻名)。

于 2010-11-21T12:50:11.643 回答
1

我找到了一种使用 StencilBuffers 的方法。有一段时间有点困惑,我终于明白了——最困难的事情是循环遍历每个光源并投影所有场景对象。这个看起来比纹理阴影更漂亮,并且比体积阴影更快。这里这里有一些资源,它们帮助我理解了矩阵乘法步骤(当我浏览恐龙演示时,它让我有点困惑)。对我来说,这种方法最容易理解和使用。剩下要解决的唯一问题是如何计算乘法矩阵。

尽管可以使用此处所示的纹理稍微更改此方法。

谢谢大家!=)

于 2010-11-21T16:49:45.927 回答