如何讓我的紋理與OpenGL ES 2.0中的像素完美圖形的屏幕像素一致?這對於我正在使用像素藝術圖形的項目至關重要。任何幫助都會很棒!iPhone OpenGL ES 2.0 - 像素完美紋理
回答
見我的答案在這裏:OpenGL Texture Coordinates in Pixel Space
這已經被問了幾次,但我沒有手頭上的鏈接,這樣一個快速和粗糙的解釋。比方說,質地爲8個像素寬:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
^ ^^^^^^^^
0.0 | | | | | | | 1.0
| | | | | | | | |
0/8 1/8 2/8 3/8 4/8 5/8 6/8 7/8 8/8
中的數字表示紋理的像素,酒吧紋理過濾的像素之間的邊界的邊緣,在最近的情況。然而,你想要擊中像素的中心。所以,你感興趣的紋理座標
(0/8 + 1/8)/ 2 = 1 /(2 * 8)
(1/8 + 2/8)/ 2 = 3/(2 * 8)
...
(7/8 + 8/8)/ 2 = 15 /(2 * 8)
或更一般地用於像素i的正寬紋理適當的紋理座標是
(2i + 1)/(2N)
但是,如果您想將您的紋理與屏幕像素完美對齊,請記住,您指定的座標不是四邊形的像素,而是邊緣,根據投影可能與屏幕像素邊緣對齊而不是中心,因此可能會需要其他紋理座標。
謝謝!這有幫助。 – Marc
我不同意 - 沒有理由做任何特別的事情。 GL確保變化的樣本總是在像素內部的某個位置(通常是中心)進行計算,所以不需要做任何特殊的事情。只需將紋理繪製爲四邊形,使用GL_NEAREST進行紋理過濾,並使用(0,0,1,1)作爲紋理座標。只要紋理與屏幕空間中的四邊形大小相同,紋理繪製就會像素完美。 –
此鏈接可能是有用的:
http://glprogramming.com/red/appendixg.html#name1
看「如果精確的二維光柵化需要......」。這個OpenGl小技巧告訴你如何最好地爲2D設置你的矩陣。
此外,您可能需要禁用任何類型的紋理過濾。
- 1. OpenGL ES 2.0紋理
- 2. OpenGL ES 2.0衍生紋理
- 3. 設置OpenGL ES 2.0紋理
- 4. OpenGL ES iPhone紋理
- 5. opengl es 2.0紋理加載
- 6. OpenGL es 2.0 Android紋理
- 7. opengl es 2.0紋理座標
- 8. 的OpenGL ES 2.0:在紋理
- 9. Android OpenGL ES 2.0紋理
- 10. Android OpenGL ES讀取紋理像素
- 11. OpenGL ES - 紋理底部的像素'Interference'
- 12. 使用現代OpenGL進行像素完美紋理映射
- 13. OpenGL ES 2.0紋理顯示黑色
- 14. OpenGL ES 2.0中的紋理點?
- 15. OpenGL ES 2.0加載動態紋理
- 16. Android OpenGL ES 2.0多紋理和相機
- 17. OpenGl ES 2.0加載紋理junkwise
- 18. OpenGL ES 2.0中的紋理圖集
- 19. opengl es 2.0紋理正確的方式
- 20. OpenGL ES 2.0中的浮點紋理
- 21. 的OpenGL ES 2.0 - 複製紋理數據
- 22. Android NDK OpenGL ES 2.0紋理間距
- 23. OpenGL ES 2.0紋理映射問題
- 24. OpenGL ES 2.0渲染爲多個紋理
- 25. iPhone openGL ES 2.0紋理 - 爲片段着色器設置多個紋理
- 26. 異步紋理加載iPhone OpenGL ES 2
- 27. 在iPhone的OpenGL ES中紋理球體
- 28. iPhone的OpenGL-ES視頻紋理
- 29. OpenGL ES渲染到紋理
- 30. Opengl-es繪製紋理
還有一件事......確保你在着色器的頂部有'precision highp float;'。如果您的紋理大於1024x1024,則中性不會爲您提供足夠的精度來對紋理中的每個像素進行採樣。 –