0

我正在使用 LWJGL 包,能够创建基本场景并绘制形状(有或没有纹理),移动自定义“相机”对象并旋转它以相应地渲染场景。但是,在创建阴影时,我不知所措。

我可以想到创建阴影的基本算法。
1) 从摄像机的视角渲染场景,就像在阴影中一样。
2)从灯光的角度渲染场景,照亮场景的可见部分(可能随着场景远离光源而变暗?)。
3) 从摄像机的视角重新渲染场景。

但是,我不知道 OpenGL(尤其是 LWJGL)的特定方法。在对这个主题进行研究后,我只遇到过需要几何图形的所有点和平面的教程,或者只包含我似乎无法为自己的项目工作的部分代码。

我是否正确地考虑了这一点?如果是这样,我需要用来对模型的可见部分进行着色(或做其他事情)的方法是什么?

4

2 回答 2

1

如您所见,最简单的方法是从灯光的角度渲染场景。将深度贴图的内容保存为阴影贴图纹理:每个深度距离光源最近。然后再次渲染场景,并计算每个片段在“世界”空间中相对于灯光位置的纹理坐标。将该值与 shadowmap 进行比较:如果它更大,则该片段被遮蔽。

许多年前,我编写了一些旧的(预着色器)OpenGL 代码来演示这一点。它在 C 中用于 GLUT,但所有 OpenGL 位在 LWJGL 或 JOGL 中都有 1:1 等效项。 http://cs.anu.edu.au/~hugh.fisher/3dstuff/shadows.tar

将其转换为等效的现代着色器应该不难。

希望这可以帮助。

于 2012-07-02T06:10:34.910 回答
0

为了实现和理解,我会说光线追踪阴影。基本上,它从地平面投射光线并检查它是否击中纹理上每个像素的任何东西。但它会疯狂地扼杀表演。因此,如果您真的想要,您可以进行一次光线计算并将其保存到纹理中,然后在关卡/扫描开始时加载它。这根本不是动态的,但它有效。

于 2015-11-18T13:10:15.607 回答