2012-11-07 79 views
0

我一直在通過具有紋理映射的NeHe教程之一(Lesson06),試圖修改代碼以允許在已創建的3D立方體上顯示不同的圖像。通過代碼看後,這是人的代碼實際上使用的圖像文件的唯一的地方:JOGL NeHe教程

TextureReader.Texture image = null; 
try { 
    image = TextureReader.readTexture("nehe/dice1.png"); 
} catch (IOException e) { 
    e.printStackTrace(); 
    throw new RuntimeException(e); 
} 

什麼我問的是你如何可以加載6倍不同的圖像,而不是僅僅1到覆蓋整個立方體?我試圖做一個「死」我有圖像1至6.如果你需要查看完整的代碼,你可以找到它在:http://www.java-tips.org/other-api-tips/jogl/texture-mapping-nehe-tutorial-jogl-port.html

回答

1

你將不得不創建6個獨立的紋理ID並綁定到繪製每個臉部之前的特定紋理ID。實際創建紋理ID的調用位於以下位置:

texture = genTexture(gl); 

然後接下來調用的所有東西實際上都設置了紋理。

加載包含解包骰子的單個紋理,或者只是簡單地包含一行中的1到6的面將會更容易。然後,只需指定正確的紋理座標即可爲每個面選擇紋理的正確部分。

相反的面的紋理共同ORDS打算從(0,0)(1,1),他們可以去從((num-1.0)/6.0, 0)(num/6.0, 1)其中num是1和6之間的雙在這種情況下,你會水平行中的圖像了。

+0

所以我會讓6個不同的紋理1 ... 6 = genTexture(gl)調用,然後通過gl.glBindTexture(GL.GL_TEXTURE_2D,texture1 ... 6)綁定它們。但我怎麼會實際加載每個圖像文件到每個? –

+0

是的。您一次加載一張圖像並創建紋理ID,與您現在使用一張圖像的方式完全相同 - 使用所有相關的代碼。就我個人而言,我*不會做6張圖片的東西......請聽我的建議,並用一張圖片來做。 – paddy

+0

是的,你是完全正確的,我需要完成1行的圖像。比使用不同的ID加載所有6更容易這樣工作。這很好! –