glCopyTexImage2D()中的纹理值错误

时间:2011-08-22 12:13:46

标签: opengl textures

我从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是固定的,我不知道为什么......

1 个答案:

答案 0 :(得分:1)

首先,我不知道你发布的内容是如何编译的,因为没有GL_DEPTH_TEXTURE这样的东西。但是GL_DEPTH_COMPONENT

其次,您应该始终使用大小深度格式。因此,使用GL_DEPTH_COMPONENT代替GL_DEPTH_COMPONENT24来获取24位深度缓冲区。请注意,像素传输格式(从头到尾的第三个参数)应该仍然是GL_DEPTH_COMPONENT

第三,你应该使用glCopyTexSubImage2D,这样你就不会一直重新分配纹理内存。