0

我一直在破解一个非常古老的固定功能管道 OpenGL 1.x 游戏。我一直在拦截 opengl 调用并注入各种现代 opengl 元素,这样我就实现了新的照明并添加了后期处理着色器(可编程管道)。

我想为这个目前不支持的游戏生成一个阴影贴图(用于实时阴影)。据我了解,我需要执行游戏当前不支持的多通道渲染,并且我需要其中一个通道来使用光源作为相机位置,以生成阴影贴图。

我在想我可以加倍绘制调用(drawelements和drawarrays),对于每个调用之一,使用gluLookAt将场景转换为灯光位置的透视图,并将其渲染到帧缓冲区,然后恢复相机并继续渲染

但是,我不确定我是否足够了解 opengl 状态来执行此操作,因为在单独的渲染调用之前每次使用 gluLookAt 都会给我带来非常时髦的结果,即使我提供了从模型视图矩阵中提取的当前相机位置。这些时髦的结果就像,一些随机顶点在正确的位置,而许多不在,它们在整个地方闪烁和移动

我假设我不应该在单个渲染调用顶点数组时尝试转换相机..但我不确定下一步该怎么做,因为我需要两次通过。

问题:在渲染调用期间是否存在执行 gluLookAt 有意义的特定时间,或者使用它从单个渲染调用的上下文中转换整个场景的方法?

我唯一的另一个想法实际上是按顺序记录所有渲染和矩阵转换,然后重播它们以进行第二遍。

4

0 回答 0