Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ OpenGL-渲染到3D纹理对纹理没有影响_C++_Opengl_Shader - Fatal编程技术网

C++ OpenGL-渲染到3D纹理对纹理没有影响

C++ OpenGL-渲染到3D纹理对纹理没有影响,c++,opengl,shader,C++,Opengl,Shader,我正在尝试将顶点信息拉伸到3D纹理中 对应的C++代码: GLuint color_tex; GLuint fb; glGenTextures(1, &color_tex); glBindTexture(GL_TEXTURE_3D, color_tex); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILT

我正在尝试将顶点信息拉伸到3D纹理中

对应的C++代码:

GLuint color_tex;
GLuint fb;
glGenTextures(1, &color_tex);
glBindTexture(GL_TEXTURE_3D, color_tex);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexImage3D(GL_TEXTURE_3D, 0, GL_R32UI, 32, 32, 32, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, NULL);
  //-------------------------
glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
 //Attach one of the faces of the Cubemap texture to this FBO
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, color_tex, 0);
//-------------------------
//Does the GPU support current FBO configuration?
GLenum status;
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status)
{
    case GL_FRAMEBUFFER_COMPLETE:
        std::cout << "good" << std::endl;
    default:
        break;
}
//-------------------------
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(splat_vertex_ids);
glBindVertexArray( mVAO );
glDrawArrays(mPrimitiveType, 0, mDrawSize);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

GLuint content[32*32*32];
glBindTexture(GL_TEXTURE_3D, color_tex);
glGetTexImage(GL_TEXTURE_3D, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, &content);

for(int i = 0; i< 32*32*32; ++i)
    if(content[i] != 0)
        std::cout << content[i] << std::endl;
顶点着色器:

#version 330

layout(location = 0)in vec3 aPosition;

uniform vec3 uChunkStart;
uniform float uRes;

out vec3 vPosition;

void main(void)
{
    vPosition = aPosition;
}
片段着色器:

#version 330

in vec2 oTexCoord;

out uint color;

void main(void)
{
    color = 1337u;
}
我不知道这有什么问题。它不应该创建一个单点吗?我第一次做这样的事


编辑:对2D纹理的渲染也会失败

在使用
glFramebufferTextureLayer
时,我是否仍可以在着色器程序中使用gl_层,还是仅限于绑定层?我想我误解了您试图通过输出到
gl_层
0来执行的操作。在3D纹理中,NDC空间中Z=0.2的点实际上对应于mipmap级别0,第18层。--31*(0.2+1.0)/2.0@AndonM.Coleman着色器只是占位符。稍后,输入将是一个带有vec3坐标的点集,并且应该根据坐标将ID显示到纹理中。我目前仅使用此着色器进行测试。我需要一次渲染所有层。不确定这是否会导致您的直接问题,但您的纹理不完整<代码>GL_LINEAR不是整数纹理的有效过滤模式。您需要使用
GL\u NEAREST
进行
MIN\u筛选
MAG\u筛选
。@RetoKoradi改变了这一点,并运行2个查询。生成了1024个基本体,但通过了0个样本
#version 330

in vec2 oTexCoord;

out uint color;

void main(void)
{
    color = 1337u;
}