2011-01-30 33 views
0

OpenGLとJOGLでフレームバッファを使いこなしています。私は描画するGraphicsオブジェクトを持っています。OpenGLフレームバッファ操作で、アルファチャンネルでdrawPixelsが失敗する

Graphicsが変化するたびに、各ピクセルのR、G、B、A情報をバイトとして抽出し、A R G B順序でByteBufferに書き込みます。私は変換をチェックした、それは大丈夫です。

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

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); 

おかげ

+1

'ib1'はどのように定義されていますか? – datenwolf

+0

ib1は、イメージのRGBA値をコピーするバイト配列をラップするバイトバッファです – Cookie

+0

実際に私は答えを見つけました。それはJavaとOpenGLのバイト形式でした...私は問題/解決策を後で投稿します... – Cookie

答えて

0

問題だった画素データのOpenGLの形式が期待:

だからフレームバッファの操作のための私のコードは、IB1は、画像データのバイトのバッファであり、 。

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

関連する問題