0

我有一个用 OpenGL 构建的场景。当我的灯在房间中央时,房间外面就亮了。有什么简单的方法可以让 OpenGL 在顶点处停止照明,还是需要复杂的计算。以下是我的蹩脚、快速场景的照片,显示了问这个问题时的照明情况:

4

2 回答 2

4

本质上,您希望房间的墙壁投下阴影。当您希望对象的外部不被照亮时,这就是您想要的。

图形中的阴影通常是一个相当困难的问题。有很多好的和快速的解决方案,但不是两者兼而有之——任何一种解决方案都将是两者之间的权衡。SIGGRAPH充满了真正聪明的人试图解决这个问题的各种论文。

如果你想要一些快速而肮脏的东西,阴影贴图并不是非常困难(至少是简单的那种),但它并不精确。你会在你的对象和墙壁的交叉处看到文物,例如。为了精确起见,模板阴影会起作用,但你会有硬边阴影。

于 2013-01-27T23:23:21.283 回答
1

这里的一个解决方案可能是以某种方式创作几何图形,即对象不会突出到墙外(或将它们分成内部/外部部分)。然后用不同的灯光渲染内部和外部。

如果一切都会给一切投下阴影,你就不会有问题。

如果灯光是静态的,您可能需要考虑预先计算(烘焙)光照(连同阴影)。您可以在许多 3D 包中执行此操作,从编程的角度来看,这可能是最简单的解决方案。

如果你有一个针对每盏灯的实时渲染阴影的通用解决方案,那也可以解决你的问题,但这是一项具有挑战性的任务,而且如果你想保持良好的帧,它也可能不是最佳选择——率。

如果您想了解实时阴影渲染,我建议您查看阴影贴图——它们通常是当今大多数游戏中使用的解决方案。请注意,对于点光源,您需要为立方体贴图的 6 个面渲染阴影贴图。出于实际目的,您应该真正考虑哪些灯光真正需要投射阴影,并做出某种权衡。

于 2016-01-30T18:52:09.377 回答