2012-09-28 58 views
2

您可以使用glReadPixels從紋理圖像讀取像素數據嗎?使用glReadPixels讀取紋理圖像的像素數據

我的用於生成紋理圖像的代碼是:

gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, width, height, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(pixels)); 

可變像素包含的圖像的像素值。然後,我使用glReadPixels嘗試讀取剛創建的紋理圖像的像素數據。 我使用glReadPixels代碼:

FloatBuffer buffer = FloatBuffer.allocate(4); 
    for (int row = 0, col; row < height; row++) { 
     for (col = 0; col < width; col++) { 
      gl.glReadPixels(col, row, 0, 0, GL2.GL_RGBA, GL2.GL_FLOAT, buffer); 
      System.out.print(buffer.get(0)); 
     } 
     System.out.println(); 
    } 

的問題是我不斷收到值0.0, 如果紋理圖像存儲在幀緩衝,因爲glReadPixels讀取幀緩衝器數據我不知道?

回答

5

glReadPixels從默認幀緩衝區讀取(GL_BACK用於dbl緩衝),是的。 要讀取紋理,您可能需要使用帶有附加紋理色彩緩衝區的FBO。 然後設置FBO激活,你可以使用glReadPixels。 由於FBO是非常複雜的馴服,你正在使用JOGL, 我鏈接到一個offscreen unit test內部使用GLFBODrawable/FBObject 並使用glReadPixels執行快照。你需要通過代碼走一點,它是新的API。

2

我覺得在這一行中的錯誤。

gl.glReadPixels(col, row, 0, 0, GL2.GL_RGBA, GL2.GL_FLOAT, buffer); 

試試下面的不是

gl.glReadPixels(col, row, 1, 1, GL2.GL_RGBA, GL2.GL_FLOAT, buffer); 

此外,最好在同一時間讀取整個圖像。不要忘記分配所需的緩衝區大小。

gl.glReadPixels(col, row, width, height, GL2.GL_RGBA, GL2.GL_FLOAT, buffer); 
相關問題