LWJGL 坐标动画纹理关闭

LWJGL Animated Texture by coordinates is off

我正在尝试通过将 1.0f 除以帧数(glTexCoords 范围为 0-1),使用纹理坐标为 LWJGL 中的纹理设置动画,其中 returns 帧间隔在这样的图像中:

    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 的除数, , 理论上应该有效,但实际上无效。

看起来很像你的纹理不是你想象的大小。您可能正在使用 image/texture 加载库,该库在导入期间将大小填充为 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个显示部分黑色填充。

要解决此问题,您有以下几种选择:

  • 检查 image/texture 加载库是否有防止舍入到 2 的幂的选项。如果有就使用它。
  • 使用没有这些陈旧限制的其他库。
  • 实际使用 1/16 作为纹理坐标的乘数,但只绘制您实际拥有的帧数 (10)。