C++ OpenGL-渲染到3D纹理对纹理没有影响
我正在尝试将顶点信息拉伸到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
对应的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;
}