OpenGl Textures:错误的像素

时间:2012-10-29 08:40:23

标签: c++ opengl pixel textures

我在OpenGl中使用Textures时遇到了麻烦(仅限2D)

我想显示一个Level(大小为15x15),每个Field可以有不同的值/图片 我有大约100种不同的Fieldtypes,根据leveldesign,我必须为每种类型显示不同的图像 如果我为每个可能的字段使用单个tga-Image(100个文件),一切正常, 但现在我将所有图像放在一个文件中,根据字段类型,我总是在图像中显示不同的部分。

问题:有时图像中的细线不会显示,并且在不同的精灵之间,通常会出现黑色或灰色线条,这会使整个图形变得难看。

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

这是我的图像文件的一部分,每个元素的分辨率为220x220像素 - >全图:2200x2200像素 Sprite-Images

这就是OpenGl输出:
OpenGl-Output

我真的不想拥有图像文件的内容。特别是因为加载所有这些文件会耗费大量时间,我确信有一个解决方案

修改

我正在使用以下设置:

// 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);

EDIT2:

现在我将GL_LINEAR更改为GL_NEAREST并在纹理坐标中添加了半个纹理元素,图像之间没有任何线条了:) 但我还有另一个问题:
pixel-bug
图像中的小元素(线条)无法正确显示 这应该是这样的:
howitshouldlook

2 个答案:

答案 0 :(得分:2)

“请记住,OpenGL会在纹素中心对纹理进行采样”

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

答案 1 :(得分:0)

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