2017-01-03 16 views
2

glReadPixels機能で深度バッファから深度値を取得しようとしています。それはいつも私に0を返します。OpenGL ES 1.0の深さを得るためにglReadPixelsが機能しない

すべての最初は、私は、デプスバッファの添付ファイルを作成します、

float depth = 0.0f; 

glReadPixels(point.x, self.renderUIView.frame.size.height - point.y, 1, 1, GL_DEPTH_COMPONENT16_OES, GL_FLOAT, &depth); 

が、それは動作しません:

glGenFramebuffersOES(1, &viewFramebuffer); 
glGenRenderbuffersOES(1, &viewRenderbuffer); 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
[self.context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; 
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); 

glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); 
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); 

if (USE_DEPTH_BUFFER) 
{ 
    glGenRenderbuffersOES(1, &depthRenderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); 
} 

はその後、私はデプスバッファからの奥行き値を取得するにはglReadPixels関数を呼び出します深さの値は常に0です。私はglGetError()からエラーコードを取得しようとします、それは1280を返します。セットアップに迷ったことは何ですか?

+0

あなたのお返事ありがとうございます。問題はOpenGL ES 1.0とOpenGL 2.0の間で同じですか? –

+0

私はそれがわからないことを恐れています。 –

+0

@RawN OK、お返事ありがとうございます。 –

答えて

0

OpenGL ES(APIバージョン)ではサポートしていません。深度バッファにはglReadPixelsを使用する手段はありません。

また、メインレンダリングループの一部として実際の3DゲームにglReadPixelsを使用することは、「本当に悪い考えです」ということに注意してください。パイプラインがフラッシュされ、パフォーマンスが完全になくなります。

+0

あなたのお返事ありがとうございます。ところで、OpenGL ES 1.0で深度バッファの値を取得するにはどうしたらいいですか? –

+0

OpenGL ES 1.0ではあなたは不運になります。あなたが望むことをする手段はありません。 – solidpixel

+0

OpenGL ES 2.0以降では、オフスクリーンをFBOにレンダリングする場合、2番目のレンダーパスでテクスチャとして深度値を読み取ることができます。フラグメントシェーダを使用してRGBAカラーバッファにエンコードします。このバッファはglReadPixelsを呼び出すことができます(ただし、パフォーマンスは低下します)。あなたがオフスクリーンのサーフェスではなく、メインのウィンドウサーフェスにレンダリングしている場合は、ウィンドウサーフェスのデプスバッファをテクスチャとしてマップする手段がないため、不運になります。 – solidpixel

関連する問題