1

我对低级openGL编码相当陌生,我有一个问题,也许我太累了,无法找到解决方案。我敢肯定答案很简单,我正在做一些非常愚蠢的事情,但是这里......

我有一个 1024 x 512 的纹理,我正在渲染一个 2D 四边形,它打算使用该纹理的一部分。四边形与我尝试渲染的纹理部分的大小相同,例如顶点之间的 100 x 100 以渲染 100 x 100 的纹理部分。假设基于零的像素坐标,纹理像素来自 0(s) 和 104(t),因此 UV(st) 被计算为 0 / 1024 和 104 / 512,范围为 100 / 1024 和 204 / 512。

然而,当我渲染四边形时,我从 103(t) 处的像素坐标中得到一条线,它是图像不同部分的一部分,所以它真的很突出。我可以通过将 UV 设置为 0 / 1024 和 105 / 512 来解决这个问题,但这对我来说似乎非常错误。

我一直在寻找一段时间,找不到我做错了什么。我在 glparams 中尝试了 GL_LINEAR、GL_NEAREST、clamping 等,但无济于事。有人可以指导我解决我的错误吗?

4

1 回答 1

1

那是因为纹理坐标不解决像素问题,因此您的假设

因此,UV(st) 被计算为 0 / 1024 和 104 / 512,范围为 100 / 1024 和 204 / 512

是错的!

这是一个常见问题解答,我最近在像素空间中的 OpenGL 纹理坐标中回答了它

于 2011-05-06T14:06:35.803 回答