代码之家  ›  专栏  ›  技术社区  ›  shybovycha

如何在OpenGL中创建快速简单的场景无关阴影w/o着色器

  •  6
  • shybovycha  · 技术社区  · 14 年前

    让我在房间的中心放一些网格(例如球体),里面装满了立方体和一个光源。我该怎么做 又快又容易 OpenGL中的阴影投射,仅使用“标准”(固定)函数?注意:结果必须包含立方体和球体阴影。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Goz    14 年前

    如果可以生成球体的轮廓,则可以使用 shadow volumes . nVidia硬件也支持固定功能 shadow mapping 还有一段时间。

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

    如果你投射到一个平面上,很容易 project the object on to a plane .

        2
  •  2
  •   iuiz    14 年前

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

    创建阴影的最重要方法是所谓的“阴影映射”方法,在该方法中,您将场景(相机位于光源处,指向每个阴影投射对象)渲染为纹理。第二种技术是阴影-沃卢姆法(以Doom3闻名)。

        3
  •  1
  •   shybovycha    14 年前

    我找到了一种使用模具缓冲区的方法。有一段时间我有点困惑,我终于有了这个想法——最困难的事情是在每个光源之间循环并投影所有场景对象。这一个看起来比纹理阴影更漂亮,工作速度比体积阴影快。 here here 是一些帮助我理解矩阵乘法步骤的资源(当我在看dino演示时,它让我有点困惑)。对我来说,这种方法最容易理解和使用。唯一要解决的问题是如何计算乘法矩阵。

    虽然这个方法可以用纹理来改变一点 as shown here .

    谢谢大家!=)