2015-04-01 81 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