【发布时间】:2014-04-09 04:22:12
【问题描述】:
我正在尝试在 OpenGL 中为一个应用程序创建一个矩形、锐利的光源。我的想法是创建一个聚光灯并以某种方式将阴影的形状遮盖成一个矩形,当然遮罩必须通过相机不可见。当我试图实现这个想法时,事实证明 OpenGL 只会跳过在相机外渲染对象,尽管相机外的光源仍然有效。这使我无法创建我想要的效果,我想知道你们中是否有人遇到过类似的问题。
为了让我的问题更具体,请考虑以下我的问题:
0,0,5 处的聚光灯
目标对象位于 0,0,0
在 0,0,3 处遮罩对象(平行于 x 轴的简单四边形)。
当相机在 0,0,4 时,光线穿过遮罩物体并在目标物体上留下一个矩形(这是我想要的),但我也可以看到遮罩物体!(而我需要遮罩对象不可见)
当我将相机移近目标对象时,例如 0,0,2。蒙版对象位于相机后面,因此不可见。但是,由于它是不可见的,因此OpenGL停止了渲染,因此遮罩对象对目标对象没有任何影响,并且阴影仍然是圆形的!
【问题讨论】:
-
OpenGL 只有点光源。您可能想考虑制作一个由平面上带有矩形孔的点光,并使用一些阴影技术(阴影贴图、模板阴影等)。或者,如果那是唯一的光并且您不喜欢制作阴影 - 为矩形光编写自定义光照着色器。
-
您好 Korm Stem,非常感谢您的及时回复。我确实需要其他灯光,而且我也很难用默认的 OpenGL 聚光灯生成一个锐利的光源。也许我确实需要为此编写一个着色器。再次感谢!
-
@KromStern:实际上现代 OpenGL 根本没有光源。它有一个可编程的着色器管道,光源是任何你想出的可以在着色器中实现的照明模型。
标签: opengl