我在opengl中有一个奇怪的错误我无法解释。 我已经使用教程的复制粘贴“编程”了阴影贴图。 我想显示阴影贴图,所以我写了一个显示它的小例程。它不起作用(我只得到一个白色方块)。 最后,通过尝试很多,我得到的阴影在场景的主渲染上几乎是正确的。但是当我取消注释例程以显示阴影贴图时,阴影不再渲染。 (在主渲染之前)
我想这与glBindTexture(GL_TEXTURE_2D, depthTex)
(存储在shadowbuffer中)有关。如果没有要求引用此depthTex
来显示阴影贴图,则会以某种方式构建阴影,但当被要求显示此depthTex
时,则计算出的阴影是不可见的。
我想知道如果曾经询问glBindTexture(GL_TEXTURE_2D, depthTex)
是否显示了shadowMap,那么depthTex
就不再能够连接阴影着色器的计算了。
我不明白glBindTexture
是用于阅读还是写作......
这个depthTex
确实被定义为存储阴影贴图的纹理。
总结:两段代码干扰,因此纹理的渲染似乎变得比简单地给出常规opengl命令以显示纹理更复杂。就像glBindTexture(GL_TEXTURE_2D, depthTex)
只能调用一次一样。
如果我在显示阴影贴图例程时要求显示程序的另一个纹理(例如“floor”),那么阴影在主渲染场景上是正常的,但是当我要求显示{{1}时然后阴影不再起作用了。
答案 0 :(得分:2)
我在opengl中有一个奇怪的错误我无法解释。我已经使用教程的复制过去“编程”了阴影贴图。
简而言之:你是cargo culting。 阅读一些好的OpenGL tutorial(s),了解他们所教的内容,然后你会取得一些进展。
我不明白glBindTexture是用于读取还是用于写入...这个depthTex确实被定义为存储阴影贴图的纹理。
这两个都是。它选择绑定到活动纹理单元的纹理。启用纹理或着色器绑定纹理单元中的样本时,将读取绑定纹理。调用glTex中的一个...图像函数将写入它。