簡體   English   中英

OpenGL ES 2.0渲染到紋理坐標系

[英]OpenGL ES 2.0 Render to texture coordinate system

我發現如果我使用glFramebufferTexture2D在OpenGL ES 2.0 glFramebufferTexture2D圖元渲染為紋理,則坐標系與渲染為默認幀緩沖區時不同。 例如:V0(-1,-1),我想會在左下角,但是如果渲染到紋理,則V0會在右上角。 有人可以告訴我為什么嗎?

(-1,-1)當然不應該映射到右上角。 但是它看起來似乎在左上方,具體取決於您如何看待數據。

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

可能導致意外行為的幾種情況:

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

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

  3. 使用FBO渲染到紋理,然后使用該紋理進行采樣。 此紋理的行從下到上排列。 與您在示例1中使用的紋理數據從上到下排列的示例相比,現在可以翻轉v紋理坐標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM