OpenGL:在顶点停止光线的简单方法?

时间:2013-01-27 23:11:08

标签: c++ opengl vertex lighting

我有一个用OpenGL构建的场景。当我的灯光在房间的中央时,房间的外面会被点亮。有没有简单的方法可以让OpenGl停止顶点的光照,或者需要复杂的计算。以下是我蹩脚,快速的场景照片,展示了提问时的照明:

2 个答案:

答案 0 :(得分:4)

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

图形中的阴影通常是非常难的问题。有很多好的,很多快速的解决方案,但不是两者兼而有之 - 任何一个解决方案都将在两者之间进行权衡。 SIGGRAPH是来自Really Smart People试图解决此问题的full all sortspapers

如果你想要快速和肮脏的东西,shadow mapping并不是非常困难(至少是简单的那种),但它是不精确的。你会看到物体和墙壁交叉处的文物。为了精确,stencil shadows会起作用,但你会有一些硬边的阴影。

答案 1 :(得分:1)

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

如果一切都会在所有事物上投下阴影,你就不会遇到问题。

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

如果您有针对每个灯光实时渲染阴影的通用解决方案,这也可以解决您的问题,但这是一项具有挑战性的任务,如果您想要维护它也可能不是最佳选择良好的帧率。

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