2015-04-01 85 views
0

我试图在LWJGL中使用纹理坐标将1.0f除以帧数(glTexCoords范围从0-1),这会返回图像中帧的间隔像这样:LWJGL坐标的动画纹理关闭

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作为帧数s发生:Another problem它似乎添加了一些黑色框架。我没有看到它加载纹理时出了什么问题,将1除以帧数,然后使用当前帧号*它为y1分割的数字,然后使用y1 + y2的除数,女巫应理论上工作,但事实并非如此。

回答

2

它看起来非常像你的纹理不是你认为它的大小。您可能正在使用图像/纹理加载库,在导入过程中将大小设置为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)。
+0

看来,Slick_Util四舍五入到1024,我把它的大小设置为64x512,当我用10作为它现在工作的帧数。 – Coppyhop 2015-04-02 17:21:56