iPhone OpenGL ES 2.0 - 像素完美纹理

发布于 2024-12-02 06:41:08 字数 87 浏览 1 评论 0原文

如何使我的纹理与屏幕像素对齐,以在 OpenGL ES 2.0 中获得像素完美的图形?这对于我正在从事的使用像素艺术图形的项目至关重要。任何对此的帮助都会很棒!

How can I get my textures to align with the screen pixels for pixel perfect graphics in OpenGL ES 2.0? This is critical for a project I'm working on which uses pixel art graphics. Any help on this would be great!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖乖 2024-12-09 06:41:08

查看我的答案:像素空间中的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

数字表示纹理的像素,条形表示纹理的边缘,如果是最近过滤,则表示像素之间的边界。然而,您想要击中像素的中心。所以您对纹理坐标感兴趣

(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)

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

See my answer here: OpenGL Texture Coordinates in Pixel Space


This has been asked a few times, but I don't have the links at hand, so a quick and rough explanation. Let's say the texture is 8 pixels wide:

 | 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

The digits denote the texture's pixels, the bars the edges of the texture and in case of nearest filtering the border between pixels. You however want to hit the pixels' centers. So you're interested in the texture coordinates

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

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

...

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

Or more generally for pixel i in a N wide texture the proper texture coordinate is

(2i + 1)/(2N)

However if you want to perfectly align your texture with the screen pixels, remember that what you specify as coordinates are not a quad's pixels, but edges, which, depending on projection may align with screen pixel edges, not centers, thus may require other texture coordinates.

东走西顾 2024-12-09 06:41:08

此链接可能有用:

http://glprogramming.com/red/appendixg.html#name1

查看“如果需要精确的二维光栅化...”。这个 OpenGL 技巧告诉您如何最好地设置 2D 正交矩阵。

此外,您可能需要禁用任何类型的纹理过滤。

This link may be usefull:

http://glprogramming.com/red/appendixg.html#name1

Look at "If exact two-dimensional rasterization is desired...". This OpenGl tip tells you how to best setup your ortho matrix for 2D.

Also, you may need to disable any kind of texture filtering.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文