2016-10-17 8 views
0

こんにちは私はC++を使ってOpenGLで影を実装しようとしています。 FrameBufferとDepthTextureを作成しました。すべてのフレームI m rendering my entities to the FrameBuffer. For now Iは他のGUIのように画面上にテクスチャを表示していますが、テクスチャは完全に白で、カメラを動かすと変化しません。あなたが私が問題を見つけるのを助けることができれば幸いです。FrameBufferからDepthTextureをレンダリングする

マイコード:レンダラで



    //Creating FrameBuffer + Texture 
    glGenFramebuffers(1, &depthMapFBO); 
    glGenTextures(1, &depthMap); 
    glBindTexture(GL_TEXTURE_2D, depthMap); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, m_width, m_height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); 
    glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depthMap, 0); 
    glDrawBuffer(GL_NONE); 
    glReadBuffer(GL_NONE); 
    glBindFramebuffer(GL_FRAMEBUFFER, 0); 



    glm::mat4 lightSpaceMatrix = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, Camera::ZNEAR, Camera::ZFAR) * glm::lookAt(m_position, m_position + m_forward, m_up); 
    m_shader.Bind(); 
    m_shader.loadMat4("lightSpaceMatrix", lightSpaceMatrix); 

    //Bind the FrameBuffer 
    glViewport(0, 0, m_width, m_height); 
    glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); 
    glClear(GL_DEPTH_BUFFER_BIT); 
    glEnable(GL_DEPTH_TEST); 

    //Render all Entitys 
    for (auto entity : m_entitys) { 
     m_shader.loadMat4("model", entity->getTransform()->getModel()); 
     entity->getTexturedModel()->getMesh()->Draw(); 
    } 

    //Unbind the FrameBuffer 
    glBindFramebuffer(GL_FRAMEBUFFER, 0); 
    glViewport(0, 0, Setting::width, Setting::height); 
    m_shader.unbind(); 

マイバーテックスシェーダ:



    #version 430 
    in layout(location=0) vec3 position; 
    uniform mat4 lightSpaceMatrix; 
    uniform mat4 model; 

    void main() 
    { 
     gl_Position = lightSpaceMatrix * model * vec4(position, 1.0f); 
    } 

マイ・フラグメントシェーダ:



    #version 430 
    void main() 
    { 
     gl_FragColor = vec4(1); 
    } 

+2

'gl_FragColor = vec4(1);'で表示される色は? – mlkn

+0

私はカラーアタッチメントを持っていないので、フラグメントシェーダーで何が起こっているのかは関係ないと思ったので、gl_FragColorをvec4(1)に設定しました。 – Philipp98

+0

シーンを通常その投影マトリックスでレンダリングしようとしましたか?たぶん何も書かれておらず、深度のバッファーですべて白くクリアされます。また、正しいglDepthFuncを持っていますか? – mlkn

答えて

0

正射影行列の代わりに通常の射影行列を使用した後、正常に機能しました。そこで私はちょっと試してみました。私は正字行列を作成したときに、nearとfarの平面を0に設定しました。私はそれを修正し、現在は動作しています。ご協力ありがとうございました。

関連する問題