2011-01-30 150 views
0

我與OpenGL和JOGL幀緩衝瞎搞。我有一個Graphics對象,我在其中繪製。OpenGL的幀緩衝操作,drawPixels失敗,Alpha通道

每次圖形變化,我提取R,G,B和A信息作爲對於每個像素字節,它在A R G B爲了寫入一個字節緩衝區。我檢查了轉換,這是沒問題的。

如果我打電話使用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); 

在此先感謝您的幫助

+1

如何定義ib1? – datenwolf 2011-01-30 23:23:18

回答

0

問題是像素數據的OpenGL的格式要求。

我的輸出是整數,wihich我可以在4個單字節值拆分RGBA的陣列。但是,OpenGL期望它們是簽名格式,所以01111111是最高的,10000000是最低的。 從Graphics2D對象我的Java產量爲無符號,因此從值00000000(最低)到11111111 數位操作後,它現在的工作。