2012-08-08 150 views
1

使用幀緩衝 當渲染紋理出現顛倒時,這裏是頂點和紋理座標。 順便說呈現,而無需創建幀緩衝區呈現質感correctelyOpengl es渲染爲紋理出現顛倒

private final float[] mVerticesData = 
    { 
      -1f, 1f, 0.0f, // Position 0 
      0.0f, 0.0f, // TexCoord 0 
      -1f, -1f, 0.0f, // Position 1 
      0.0f, 1.0f, // TexCoord 1 
      1f, -1f, 0.0f, // Position 2 
      1.0f, 1.0f, // TexCoord 2 
      1f, 1f, 0.0f, // Position 3 
      1.0f, 0.0f // TexCoord 3 
    }; 

任何幫助,請... 感謝

回答

4

當將2D紋理圖像上傳到OpenGL時,即使通常圖像從上到下存儲在內存中,它仍然希望從下到上指定數據。你似乎顛倒了你的紋理座標來解決這個問題。

而是應該將它上傳到OpenGL的前翻轉的紋理數據,並保持你的紋理座標不變。如果你這樣做,相同的紋理座標適用於圖像和FBO紋理。

因此,解決辦法是調用GLUtils.texImage2D前翻轉的位圖和寫你的頂點作爲

private final float[] mVerticesData = 
    { 
     -1f, 1f, 0.0f, // Position 0 
     0.0f, 1.0f, // TexCoord 0 
     -1f, -1f, 0.0f, // Position 1 
     0.0f, 0.0f, // TexCoord 1 
     1f, -1f, 0.0f, // Position 2 
     1.0f, 0.0f, // TexCoord 2 
     1f, 1f, 0.0f, // Position 3 
     1.0f, 1.0f // TexCoord 3 
    }; 
+0

謝謝@msell。那就是問題,雖然現在我在觸摸座標上遇到了問題。無論用戶觸摸屏幕,垂直對象像素都會被修改... – Sol 2012-08-09 06:49:51

1

通過渲染方式,而無需創建幀緩衝渲染紋理correctely

我認爲它實際上沒有。將所有變換設置爲與頂點座標匹配的身份和紋理座標,即S = X,T = Y,OpenGL假定紋理數據的原點位於左下角(具有不同野獸的立方體貼圖的值得注意的例外)。幀緩衝區顏色附件,在你的情況下,你的紋理,就約定達成一致。

你的結構T座標反平行於Y頂點座標,這意味着在所有的身份轉換設置的情況下,你翻轉「倒掛」。

然而,大多數的圖像文件格式假設在左上角的起源,如果您上傳這些數據爲的是一個OpenGL的紋理這增加了一個翻轉,並連同您的紋理座標翻轉既抵消。

所以很有可能,你的常規紋理代碼路徑是「翻轉」的。

+0

我可是從位圖加載質地:GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0,位圖0 ); – Sol 2012-08-08 10:09:56

+0

@ user1429893:那麼?位圖包含什麼。位圖在哪裏起源? – datenwolf 2012-08-08 12:56:48