OpenGLフレームバッファー操作、drawPixelsはアルファチャネルで失敗します

framebuffer java jogl opengl
OpenGLフレームバッファー操作、drawPixelsはアルファチャネルで失敗します

OpenGLとJOGLのフレームバッファをいじっています。 描画するGraphicsオブジェクトがあります。

Graphicsが変更されるたびに、R、G、B、およびAの情報を各ピクセルのバイトとして抽出し、A R G Bの順序でByteBufferに書き込みます。 変換を確認しましたが、大丈夫です。

GL_RGBモードを使用してdrawPixelsメソッドを呼び出すと、指定された座標にボックスが描画され、グラフィックスの色に関係なく黒で描画されます。 GL_RGBAモードを使用すると、何も描画されません。

したがって、フレームバッファ操作の私のコード、ib1は画像データを含むバイトバッファです。

    GL gl=canvas.getGL();

    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrtho (0, canvas.getWidth(), canvas.getHeight(),0, -1.0, 1.0);
    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glDisable(GL.GL_DEPTH_TEST);
    gl.glColor3f(1, 1, 1);
    //
    gl.glRasterPos2i(0, height);
    //gl.glDrawPixels(width, height, GL.GL_RGB, GL.GL_BYTE, ib1);
    gl.glDrawPixels(width, height, GL.GL_RGBA, GL.GL_BYTE, ib1);

ご協力ありがとうございます

  0  0


ベストアンサー

問題は、OpenGLが期待するピクセルデータの形式でした。

出力は整数の配列で、RGBAの4つのシングルバイト値に分割できました。 ただし、OpenGLはそれらが符号付き形式であると想定しているため、01111111が最高で、10000000が最低値です。 Graphics2DオブジェクトからのJava出力は符号なしであるため、値は00000000(最低)から11111111までです。 数ビット操作後、現在動作しています。

0


タイトルとURLをコピーしました