iPhone OpenGL ES 2.0 - 像素完美纹理

Mar*_*arc 6 textures opengl-es pixel ios

如何让我的纹理与OpenGL ES 2.0中像素完美图形的屏幕像素对齐?这对我正在使用像素艺术图形的项目至关重要.任何有关这方面的帮助都会很棒!

dat*_*olf 8

请在此处查看我的答案:像素空间中的OpenGL纹理坐标


这已被问了好几次,但我手边没有链接,所以快速而粗略的解释.假设纹理宽度为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
Run Code Online (Sandbox Code Playgroud)

数字表示纹理的像素,条纹表示纹理的边缘,并且在最近的情况下过滤像素之间的边界.但是你想要点击像素的中心.所以你对纹理坐标感兴趣

(0/8 + 1/8)/ 2 = 1 /(2*8)

(1/8 + 2/8)/ 2 = 3 /(2*8)

...

(7/8 + 8/8)/ 2 = 15 /(2*8)

或者更一般地,对于N宽纹理中的像素i,适当的纹理坐标是

(2i + 1)/(2N)

但是,如果您想要将纹理与屏幕像素完美对齐,请记住您指定为坐标的不是四边形像素,而是边缘,根据投影可能与屏幕像素边缘对齐,而不是中心,因此可能需要其他纹理坐标.