LWJGL“按坐标绘制动画纹理”处于禁用状态



我正试图使用纹理坐标在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)时,它会这样做:我的问题但如果我用16作为帧数,就会发生这种情况:另一个问题似乎是添加了一些黑框。我看不出这里有什么错,它加载纹理,用1除以帧数,然后使用当前帧数*除以y1,然后使用y1+除以y2的数字,理论上应该有效,但它没有。

看起来你的纹理并不是你想象的大小。你可能使用了一个图像/纹理加载库,在导入过程中,该库将大小增加到2的幂。

这意味着加载的图像大小为64x1024,其中64x640包含原始图像(每个64x64的10帧),其余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)

最新更新