2014-11-04 106 views
0

我發現如果使用glFramebufferTexture2D渲染原始圖像到OpenGL ES 2.0中的紋理,座標系與渲染到默認幀緩衝區時不同。例如:V0(-1,-1),我認爲是在左下方,但如果我渲染到紋理,V0會在右上方。有人可以告訴我爲什麼嗎?OpenGL ES 2.0渲染到紋理座標系

回答

2

(-1,-1)當然不應該映射到右上角。但它可能是左上角,取決於你如何看待數據。

實際上,(-1,-1)始終是默認OpenGL座標系中的左下角。它看起來容易混淆的原因是因爲紋理在內存中的排列方式。它們從下到上存儲,即存儲器中的第一行是最底部的一行。這與大多數圖像文件格式不同,第一行是最上面一行。這是大多數y-反演問題的根本原因。

一對夫婦的場景中這可能會導致意外的行爲:

  1. 您從與存儲數據從上到下格式的文件加載圖像,並將其用於採樣。如果要以原始方向顯示圖像,則需要對底部頂點對應的v紋理座標使用1.0,對頂點頂點使用0.0,這與頂點座標使用的方向相反。對頂部紋理座標使用0.0會將紋理的第一行放在頂部,這與內存中的順序相匹配。

  2. 您使用默認設置做了glReadPixels()。結果中圖像的行從底部到頂部排列。如果要將數據保存爲從上至下存儲數據的圖像格式,則需要在寫出數據時翻轉行的順序。

  3. 使用FBO渲染到紋理,然後使用此紋理進行採樣。該紋理具有從底部到頂部排列的行。 v紋理座標現在與您在示例1中使用的紋理座標相比翻轉,紋理數據從上到下排列。

+0

呵呵,謝謝,這個問題困擾了我很長一段時間,但是現在我好像已經知道這個問題了,所以,非常感謝你! @Reet Koradi – HelloWorld 2014-11-04 08:17:13