我在OpenGl中使用Textures时遇到了麻烦(仅限2D)
我想显示一个Level(大小为15x15),每个Field可以有不同的值/图片
我有大约100种不同的Fieldtypes,根据leveldesign,我必须为每种类型显示不同的图像
如果我为每个可能的字段使用单个tga-Image(100个文件),一切正常,
但现在我将所有图像放在一个文件中,根据字段类型,我总是在图像中显示不同的部分。
问题:有时图像中的细线不会显示,并且在不同的精灵之间,通常会出现黑色或灰色线条,这会使整个图形变得难看。
有没有办法轻松解决这个问题?
(也许我必须将tga-image加载到一个GLuint中,然后将其分成100个不同的GLunint?或者是否有设置来改善渲染?或者我是否必须更改tga-image文件本身的分辨率?)
这是我的图像文件的一部分,每个元素的分辨率为220x220像素 - >全图:2200x2200像素
这就是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);
EDIT2:
现在我将GL_LINEAR更改为GL_NEAREST并在纹理坐标中添加了半个纹理元素,图像之间没有任何线条了:)
但我还有另一个问题:
图像中的小元素(线条)无法正确显示
这应该是这样的:
答案 0 :(得分:2)
“请记住,OpenGL会在纹素中心对纹理进行采样”
答案 1 :(得分:0)
您需要在纹理中添加填充像素,以避免沿边缘的线条。因此,当OpenGL从要绘制的纹理中采样像素时(如果以比文件中更小的尺寸渲染它们,则包括mipmap级别),则不会使用错误颜色的像素。