2

我在 OpenGL 中使用纹理时遇到了麻烦(仅 2D)

我想显示一个级别(大小 15x15)并且每个字段都可以有不同的值/图片。
我有大约 100 种不同的字段类型,根据关卡设计,我必须为每种类型显示不同的图像。
如果我为每个可能的字段(100 个文件)使用单个 tga-Image,一切正常,但现在我将所有图像放在一个文件中,并且根据字段类型,我总是显示与图片。

问题:有时图像中的细线不显示,在不同的精灵之间,经常有黑色或灰色的线条,使整个图形难看。

有没有办法轻松解决这个问题?
(也许我必须将 tga-image 加载到一个 GLuint 中,然后将其拆分为 100 个不同的 GLuint?或者是否有改善渲染的设置?或者我是否必须更改 tga-image 文件本身的分辨率?)

这是我的图像文件的一部分,每个元素的分辨率为 220x220 像素 --> 整个图片:2200x2200 像素 精灵图像

这就是 OpenGl 输出:
OpenGL-输出

我真的不想拥有数百个图像文件。特别是因为加载所有这些文件会消耗大量时间,而且我确信那里有解决方案

编辑:

我正在使用以下设置:

// Specify filtering and edge actions
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

编辑2:

现在我将 GL_LINEAR 更改为 GL_NEAREST 并在纹理坐标中添加了半纹素,图像之间不再有线条 :)
但我还有另一个问题:
像素错误
图像中的小元素(线条)显示不正确。
它应该是这样的:
应该怎么看

4

2 回答 2

2

“请记住,OpenGL 在纹素中心采样纹理”

看看这里的答案: OpenGL ES Texture Coordinates Slightly Off

于 2012-10-29T14:52:23.890 回答
0

您需要向纹理添加填充像素,以避免沿其边缘出现线条。因此,当 OpenGL 从要绘制的纹理中采样像素时(包括 mipmap 级别,如果您以比文件中的尺寸更小的尺寸渲染它们),不会使用错误颜色的像素。

于 2012-11-13T10:44:48.917 回答