Java OpenGL绘制多个纹理
我正在尝试将场景的数据绘制到多个纹理。纹理以颜色形式保存漫反射、法线和位置。渲染场景时,仅绘制一个纹理。gl_FragData[0]在带有附件gl_COLOR_ATTACHMENT2的纹理中结束。如果我将gl_FragData[0]切换为“漫反射”,则为“正常”。或者定位GL_COLOR_ATTACHMENT2纹理的数据是正确的,因此我知道着色器中的数据是正确的,但前两个纹理最终为空白Java OpenGL绘制多个纹理,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在尝试将场景的数据绘制到多个纹理。纹理以颜色形式保存漫反射、法线和位置。渲染场景时,仅绘制一个纹理。gl_FragData[0]在带有附件gl_COLOR_ATTACHMENT2的纹理中结束。如果我将gl_FragData[0]切换为“漫反射”,则为“正常”。或者定位GL_COLOR_ATTACHMENT2纹理的数据是正确的,因此我知道着色器中的数据是正确的,但前两个纹理最终为空白 int fbo = glGenFramebuffer(); glBindFramebuffer(GL_FRAM
int fbo = glGenFramebuffer();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
addTextureAttachment(GL_COLOR_ATTACHMENT0);
addTextureAttachment(GL_COLOR_ATTACHMENT1);
addTextureAttachment(GL_COLOR_ATTACHMENT2);
Material.unbindAllTextures();
public void addTextureAttachment(int attachment) {
int id = glGenTextures();
glBindTexture(GL_TEXTURE_2D, id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer)null);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, GL_TEXTURE_2D, id, 0);
textures.add(new Texture(id, width, height));
}
在渲染之前我称之为
public void bindAsRenderTarget() {
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glViewport(0, 0, width, height);
glDrawBuffers(GL_COLOR_ATTACHMENT0);
glDrawBuffers(GL_COLOR_ATTACHMENT1);
glDrawBuffers(GL_COLOR_ATTACHMENT2);
}
我已经解决了这个问题。当我调用glDrawBuffers 3次时,我只需要调用一个不同的glDrawBuffers,它接收包含int GL_COLOR_附件0、1和2的ByteBuffer,如下所示:
ByteBuffer buffer = BufferUtils.createByteBuffer(3 * 4);
buffer.putInt(GL_COLOR_ATTACHMENT0);
buffer.putInt(GL_COLOR_ATTACHMENT1);
buffer.putInt(GL_COLOR_ATTACHMENT2);
buffer.flip();
glDrawBuffers(3, buffer);
有一个关于MRT渲染的部分: