2011-06-17 13 views

答えて

2

私は、PNGDecoder (download link is here)クラスの助けを借りて.pngテクスチャを使用しました。

私はそれを行う方法は、そのような質感の整数フィールドをインスタンス化されます。

private int tex; 

は、その後、私は私がthis webpage

private int setupTextures(String filename) { 
    IntBuffer tmp = BufferUtils.createIntBuffer(1); 
    GL11.glGenTextures(tmp); 
    tmp.rewind(); 
    try { 
     InputStream in = new FileInputStream(filename); 
     PNGDecoder decoder = new PNGDecoder(in); 

     System.out.println("width=" + decoder.getWidth()); 
     System.out.println("height=" + decoder.getHeight()); 

     ByteBuffer buf = ByteBuffer.allocateDirect(4 * decoder.getWidth() * decoder.getHeight()); 
     decoder.decode(buf, decoder.getWidth() * 4, PNGDecoder.Format.RGBA); 
     buf.flip(); 

     GL11.glBindTexture(GL11.GL_TEXTURE_2D, tmp.get(0)); 
     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, 
       GL11.GL_NEAREST); 
     GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, 
       GL11.GL_NEAREST); 
     GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 4); 
     GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, decoder.getWidth(), decoder.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf); 
     int unsigned = (buf.get(0) & 0xff); 
     System.out.println(unsigned); 
     System.out.println(buf.get(1)); 
     System.out.println(buf.get(2)); 
     System.out.println(buf.get(3)); 

    } catch (java.io.FileNotFoundException ex) { 
     System.out.println("Error " + filename + " not found"); 
    } catch (java.io.IOException e) { 
     System.out.println("Error decoding " + filename); 
    } 
    tmp.rewind(); 
    return tmp.get(0); 
} 

から見つかったこの便利なメソッドを使用しての戻り値を代入(テクスチャへのパスが必要です):

tex = setupTextures(Main.class.getResource("images/Dirt.png").getPath()); 

テクスチャをバインドするだけです。

GL11.glBindTexture(GL11.GL_TEXTURE_2D, tex); 

あなたはすべて設定されています。あなたのスタイルをインポートすることによって、java.io. [class]を忘れることができます。まったく何もインポートしないで、あなたのコード全体にそのタイプの構文を使用することができます。

関連する問題