0

立方体と線の交点の解を探しています。だから私は使った

GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_DEPTH_COMPONENT, GLES20.GL_FLOAT, zz);

zz を表示しましたが、結果は0でした。キューブに触れたときに(実際には2D画面で)キューブの深度バッファ値を取得するにはどうすればよいですか。私はGLES20とAndroid APIレベル15を使用しています。私のコードは以下です。

        ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
    ByteBuffer zBuffer = ByteBuffer.allocateDirect(4);

    PixelBuffer.order(ByteOrder.nativeOrder());
    PixelBuffer.position(0);
    zBuffer.order(ByteOrder.nativeOrder());
    zBuffer.position(0);
    FloatBuffer zz;
    zz = zBuffer.asFloatBuffer();
    GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, PixelBuffer);
    GLES20.glReadPixels(touchX, touchY, 1, 1, GLES20.GL_DEPTH_COMPONENT, GLES20.GL_FLOAT, zz);

ところで、色の選択はうまくいきます。

ありがとう!

4

1 に答える 1

0

読み込むターゲット フレームバッファを準備するのを忘れています...次のようにしてください:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, deviceWidth, deviceHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

または、単純なシェーダーを作成し、zbuffer データを FBO にレンダリングするだけです。

gl_FragColor = vec4(vec3(gl_FragCoord.z), 1.0);

次に、このFBOから色情報を読み取ります...

于 2012-08-20T12:37:53.660 に答える