2016-03-25 3 views
1

バックバッファを使用するとうまく動作しますが、フレームバッファを使用するとオブジェクトは1より大きい距離(レンダリング空間内)でレンダリングされません。これは、OpenGL 3.2のコンテキストを使用しています。OpenGLフレームバッファの深さが正しく動作しない

colorTextureID = GL11.glGenTextures(); 
    depthTexutreID = GL11.glGenTextures(); 
    frameBufferID = GL30.glGenFramebuffers(); 

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, colorTextureID); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); 
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer) null); 
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); 

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, depthTexutreID); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE); 
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE); 
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT32, width, height, 0, GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (ByteBuffer) null); 
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); 

    GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBufferID); 
    GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, GL11.GL_TEXTURE_2D, colorTextureID, 0); 
    GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, depthTexutreID, 0); 

    if (GL30.glCheckFramebufferStatus(GL30.GL_FRAMEBUFFER) != GL30.GL_FRAMEBUFFER_COMPLETE) 
     throw new RuntimeException("Frame buffer is not complete"); 

    GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0); 
+0

ビューと投影行列を確認してください – elect

+0

フレームバッファを使用しない場合はうまく動作するので、行列とは関係ありません。 – minecraftwarlock

+0

技術的には、フレームバッファを使用せずにレンダリングする方法はありません。 'GL_DEPTH_COMPONENT32F'を試してください。ドライバの変換があるかもしれません。 – elect

答えて

-1

私が、私はフレームバッファをレンダリングする際のアイデンティティにモデルとビュー行列を設定するのを忘れフレームバッファとは何の関係もなかったです。

関連する問題