2015-05-29 3 views
-1

Я пытаюсь нарисовать данные сцены для нескольких текстур. Текстуры содержат диффузное, нормальное и положение в цветовой форме. Когда сцена отображается, нарисована только одна из текстур. Gl_FragData [0] заканчивается текстурой с приложением GL_COLOR_ATTACHMENT2. Если я переключу gl_FragData [0] на диффузный, обычный. или положение текстуры GL_COLOR_ATTACHMENT2 имеет правильные данные, поэтому я знаю, что данные верны в шейдере, но первые две текстуры заканчиваются пустым.OpenGL Рисование для нескольких текстур

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); 
} 
+0

Там в разделе об оказании MRT: HTTP://www.gamedev.net/page/resources/_/technical/opengl/opengl-frame-buffer-object-201-r2333 –

ответ

0

Я решил эту проблему. когда я звонил glDrawBuffers 3 раза мне просто нужно позвонить по другому glDrawBuffers, который принимает в ByteBuffer, содержащей Int GL_COLOR_ATTACHMENT 0, 1 и 2, как это:

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); 
Смежные вопросы