我正在尝试使用纹理坐标为LWJGL中的纹理设置动画,方法是将1.0f除以帧数(glTexCoords
范围从0-1),这将返回图像中的帧间隔,如下所示:
float f = 1.0f / mat.getFrames();
GL11.glBegin(7);
GL11.glTexCoord2f(0.0F, f*curFrame);
GL11.glVertex2d(rX, rY);
GL11.glTexCoord2f(1.0F, f*curFrame);
GL11.glVertex2d(rX + this.size, rY);
GL11.glTexCoord2f(1.0F, (f*curFrame)+f);
GL11.glVertex2d(rX + this.size, rY + this.size);
GL11.glTexCoord2f(0.0F, (f*curFrame)+f);
GL11.glVertex2d(rX, rY + this.size);
GL11.glEnd();
注意这是mat.getFrames():
public int getFrames(){
return numOfFrames;
}
但是当我使用1.0f / 10(图像是64x640)时,它会这样做: My problem 但是,如果我使用16作为帧的数量:Another problem它似乎添加了一些黑色帧。我没有看到它在这里加载纹理有什么问题,将1除以帧数然后它使用当前帧数*它为y1划分的数字,然后它使用y1 + y2的划分数,女巫,理论上应该工作,但事实并非如此。
答案 0 :(得分:2)
看起来非常像你的纹理不是你想象的那么大。您可能正在使用图像/纹理加载库,在导入过程中将大小填充为2的幂。
这意味着加载的图像大小为64x1024,其中64x640包含原始图像(10帧,每帧64x64),其余64x384为黑色。这解释了所有症状:
要解决此问题,您可以选择以下几种方法: