LWJGL坐标的动画纹理关闭

时间:2015-04-01 23:14:12

标签: opengl textures lwjgl animated

我正在尝试使用纹理坐标为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的划分数,女巫,理论上应该工作,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

看起来非常像你的纹理不是你想象的那么大。您可能正在使用图像/纹理加载库,在导入过程中将大小填充为2的幂。

这意味着加载的图像大小为64x1024,其中64x640包含原始图像(10帧,每帧64x64),其余64x384为黑色。这解释了所有症状:

  • 当您绘制1/10的图像时,您会看到不止一帧。由于1024的1/10是102.4,但帧高是64,你绘制的是102.4 / 64 = 1.6帧。
  • 当你假装有16帧时,你得到全帧,但得到黑帧。由于1024的1/16是64,这与您的实际帧高相匹配。但是16个帧中只有10个是有效的。其余6个显示黑色填充的部分。

要解决此问题,您可以选择以下几种方法:

  • 检查图像/纹理加载库是否有选项以防止向上舍入为2的幂。如果存在,请使用它。
  • 使用不具有这些古老限制的其他库。
  • 实际上使用1/16作为纹理坐标的乘数,但只绘制实际拥有的帧数(10)。