Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UV坐标包括相邻的精灵_Java_Android_Opengl Es 2.0 - Fatal编程技术网

Java UV坐标包括相邻的精灵

Java UV坐标包括相邻的精灵,java,android,opengl-es-2.0,Java,Android,Opengl Es 2.0,我的精灵是统一精灵表的一部分,每个精灵都在四边形的顶部和右侧使用额外的像素绘制。他们似乎来自附近的精灵。下面是我如何定义UV坐标的: ratio = spriteCountX / spriteCountY; UVcoords.x = (float)(index % spriteCountX) / (float)spriteCountX; size.x = ratio / (float)spriteCountX; UVcoords.y = (float)(index / spriteCount

我的精灵是统一精灵表的一部分,每个精灵都在四边形的顶部和右侧使用额外的像素绘制。他们似乎来自附近的精灵。下面是我如何定义UV坐标的:

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坐标)

纹理过滤器定义为:

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\u夹具\u添加到\u边缘
,但没有成功:

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..1]内的浮动值

彻底减少伪影的唯一解决方案是在精灵之间引入一些像素填充。我建议你有两种选择:

  • 从开始创建工具以修改现有纹理图集
  • 使用精灵图纸编辑器可以创建精灵图纸纹理,并在atlas的精灵之间填充
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);