Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
C++ 将深度缓冲区渲染到纹理的管道可能存在什么问题?_C++_Opengl_Depth_Zbuffer_Depth Testing - Fatal编程技术网

C++ 将深度缓冲区渲染到纹理的管道可能存在什么问题?

C++ 将深度缓冲区渲染到纹理的管道可能存在什么问题?,c++,opengl,depth,zbuffer,depth-testing,C++,Opengl,Depth,Zbuffer,Depth Testing,根据我的理解,深度测试的主要步骤如下: 1启用深度测试以及我们希望如何进行深度测试 2创建帧缓冲区对象,并确保其具有附加的深度 3绑定帧缓冲区对象确保在渲染之前将其清除 4画东西 应该是这样吗不?我们的帧缓冲区深度附件应该有深度数据吗?但我总是得到直线1的默认深度清晰颜色 步骤1: glEnable(GL_DEPTH_TEST); glDepthFunc( GL_LEQUAL ); 步骤2: //create the frame buffer object glGenFramebuffers(

根据我的理解,深度测试的主要步骤如下: 1启用深度测试以及我们希望如何进行深度测试 2创建帧缓冲区对象,并确保其具有附加的深度 3绑定帧缓冲区对象确保在渲染之前将其清除 4画东西

应该是这样吗不?我们的帧缓冲区深度附件应该有深度数据吗?但我总是得到直线1的默认深度清晰颜色

步骤1:

glEnable(GL_DEPTH_TEST);
glDepthFunc( GL_LEQUAL );
步骤2:

//create the frame buffer object
glGenFramebuffers(1, &m_uifboHandle);

// Initialize FBO
glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle);

//create 2 texture handles 1 for diffuse, 1 for depth
unsigned int m_uiTextureHandle[2];
glGenTextures( 2, m_uiTextureHandle );

//create the diffuse texture
glBindTexture( GL_TEXTURE_2D, m_uiTextureHandle[0]);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureHandle[0], 0); 

步骤3:

//bind the frame buffer object
glBindFramebuffer( GL_FRAMEBUFFER, m_uifboHandle );

//clear it
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
步骤4:

//draw things
这些不是步骤吗? 我错过什么了吗? 我试过一些不同的教程。 我无法获得渲染到纹理的任何深度
我一次又一次地得到1。

帧缓冲区可能不完整。尝试此外,您的代码是:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
但是,应注意RGB-RGBA:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

尝试在绑定深度纹理后添加过滤参数,就像绑定漫反射纹理后一样。添加了它。还是没什么
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);