Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glCopyTexImage2D()中的纹理值错误_Opengl_Textures - Fatal编程技术网

Opengl glCopyTexImage2D()中的纹理值错误

Opengl glCopyTexImage2D()中的纹理值错误,opengl,textures,Opengl,Textures,我从glCopyTexImage2D()获得了错误的纹理值。我将深度纹理附加到FBO,并在渲染过程中获得它的值。我希望得到如下结果:(x:背景,y:正确的像素) 但是,我的结果是这样的: ---yyyyyyyyyyyyyyyyyyyy----- -----------yyyyyyyyyyy------ yyyyyy----------y----------- ---------------------------- ---------------------------- 从纹理的一半到最后,

我从glCopyTexImage2D()获得了错误的纹理值。我将深度纹理附加到FBO,并在渲染过程中获得它的值。我希望得到如下结果:(x:背景,y:正确的像素)

但是,我的结果是这样的:

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

首先,我不知道你发布的内容是如何编译的,因为没有像
GL\u DEPTH\u纹理这样的东西。但是,存在
GL\u深度\u组件

其次,您应该始终使用大小深度格式。因此,不要使用
GL\u DEPTH\u COMPONENT
,而是使用
GL\u DEPTH\u COMPONENT 24
获取24位深度缓冲区。请注意,像素传输格式(从末尾算起的第三个参数)仍应为
GL\u DEPTH\u COMPONENT


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

如果您将纹理附加到FBO,从而直接渲染到FBO,为什么要使用glCopyTexImage2D?
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_TEXTURE, 0, 0, w, h, 0);