我从glCopyTexImage2D()得到了错误的纹理值。我将深度纹理附加到FBO,并在渲染过程中获得了它的值。我期望得到如下结果:(x:背景,y:正确的像素)
---yyyyyyyyyyyyyyyyyyyy-----
-----------yyyyyyyyyyy------
yyyyyy----------y-----------
yyyyyyyyyy-------y----y-yyyy
yyyyyyyyyyyyyyyyyyyyyy------
但是,我的结果是这样的:
---yyyyyyyyyyyyyyyyyyyy-----
-----------yyyyyyyyyyy------
yyyyyy----------y-----------
----------------------------
----------------------------
从纹理的一半到结尾,仅显示背景像素。当然,从左上角到下半部分,我得到了正确的结果。
纹理创建代码如下:
glGenTexture(1, &tex);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_TEXTURE, w, h, 0, GL_DEPTH_TEXTURE, GL_FLOAT, 0);
并在呈现代码中
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_TEXTURE, 0, 0, w, h, 0);
glCopyTexImage2D有什么问题吗? w和h是固定的,我不知道为什么......
答案 0 :(得分:1)
首先,我不知道你发布的内容是如何编译的,因为没有GL_DEPTH_TEXTURE
这样的东西。但是GL_DEPTH_COMPONENT
。
其次,您应该始终使用大小深度格式。因此,使用GL_DEPTH_COMPONENT
代替GL_DEPTH_COMPONENT24
来获取24位深度缓冲区。请注意,像素传输格式(从头到尾的第三个参数)应该仍然是GL_DEPTH_COMPONENT
。
第三,你应该使用glCopyTexSubImage2D
,这样你就不会一直重新分配纹理内存。