我的精灵是穿制服的spritesheet的一部分,每个精灵都在四边形的顶部和右侧绘制了额外的像素。它们似乎来自相邻的精灵。以下是我定义UV Coords的方法:
ratio = spriteCountX / spriteCountY;
UVcoords.x = (float)(index % spriteCountX) / (float)spriteCountX;
size.x = ratio / (float)spriteCountX;
UVcoords.y = (float)(index / spriteCountX) / (float)spriteCountY;
size.y = 1.0f / (float)spriteCountY;
顶点数据:( x,y,z位置加上每个顶点的UV坐标)
vertexData[] = { -size.x / 2, size.y / 2, 0, UVcoords.x, UVcoords.y,
-size.x / 2, -size.y / 2, 0, UVcoords.x, UVcoords.y + size.y,
size.x / 2, -size.y / 2, 0, UVcoords.x + (size.x / ratio), UVcoords.y + size.y,
size.x / 2, size.y / 2, 0, UVcoords.x + (size.x / ratio), UVcoords.y}
纹理过滤器定义为:
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
GLES20.GL_NEAREST);
我尝试添加GL_CLAMP_TO_EDGE
但没有运气:
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
GLES20.GL_CLAMP_TO_EDGE);
以下是我的意思:
答案 0 :(得分:0)
这是一个名为"texture or pixel bleeding"或“纹理图集边缘工件”的已知问题。这是由于坐标的舍入,它是区间[0..1]中的浮动值。
减少剧烈伪像的唯一解决方案是在精灵之间引入一些像素填充。我建议你两个选择: