2016-03-21 17 views
-1

Şu anda gerçekten usta olmadığım FBO'yla oynuyorum. Renk atamaları ile ilgili bir sorunum yok, ama renderimdeki derinlik dokularını nasıl kullanacağımı anlayamıyorum. Şu anda, sahneyi bir FBO (renk + derinlik) üzerinde oluşturuyorum, sonra derinlik dokusunu kullanarak dokulu bir dört çiziyorum ... Ama işe yaramıyor, ekran siyah kalıyor (herşeyin 0 olması durumunda: 1000 ile çarpın 0'da kalır. (Derinlik testi çalışır: Ben derinlik yerine renk dokusunu işlemek eğer, derinlik testi düzgün çalışır)Derinlik Dokusu'mdaki sorun nedir?

Rendering döngü:

///Render to FBO 
glEnable(GL_DEPTH_TEST); 

FBO.Bind(); //Do I really need to explain what it does ? 
glUseProgram(ShaderProgram->getProgramID()); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    ///Setting uniforms etc 

mainScene.drawAll(); 


//draw the quad 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
glClear(GL_COLOR_BUFFER_BIT); 
glDisable(GL_DEPTH_TEST); 
glViewport(0, 0, m_window.getSize().x, m_window.getSize().y); 

glUseProgram(2DShader.getProgramID()); 

quadModel.bindVAO(); 
glBindTexture(GL_TEXTURE_2D, FBO.DepthTexureID); 
glDrawArrays(GL_TRIANGLES, 0, 6); 

Ve FBO yaratma:

glGenFramebuffers(1, &FBO_ID); 
glBindFramebuffer(GL_FRAMEBUFFER, FBO_ID); 

    glGenTextures(1, &ColorBufferID); 
    glBindTexture(GL_TEXTURE_2D, ColorBufferID); 

     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 

     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ColorBufferID, 0); 

glBindTexture(GL_TEXTURE_2D, 0); 








glGenTextures(1, &DepthTexture); 
     glBindTexture(GL_TEXTURE_2D, DepthTexture); 
       glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); 
       glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, DepthTexture, 0); 
     glBindTexture(GL_TEXTURE_2D, 0); 

bir fikrin?

cevap

1

Derinlik dokananız mipmap-complete değil, varsayılan mipmap filtrelemesini kullanıyorsunuz, bu nedenle örnekleme başarısız oluyor. Bu dokuyu örneklemek için GL_NEAREST veya LINEAR gibi bazı mipmalammayan filtreleri belirtin.