将阴影贴图添加到封闭源单次通过固定功能管线OpenGL 1.x游戏

问题描述

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

我想为此游戏生成一个阴影贴图(用于实时阴影),当前不支持此贴图。据我了解,我需要执行游戏当前不支持的多遍渲染,并且需要其中一遍将光源用作摄像头位置,以生成阴影贴图。

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

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

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

问题:在渲染调用过程中是否有特定的时间执行gluLookAt,或者有一种方法可以使用它从单个渲染调用的上下文中转换整个场景?

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...