2011-11-17 84 views
1

我正在使用openGL并试图让我的头部围绕纹理映射。作为ByteBuffer用于OpenGL纹理映射的Java图像

此刻,我有以下补充一点,我会用一个形象:

GL11.glBindTexture(GL11.GL_TEXTURE_2D, 1); 
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); 

GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); 
GL11.glTexParameteri (GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); 
GL11.glTexParameteri (GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); 
GL11.glTexParameteri (GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); 

GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); 

GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, 32, 32, 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, "imageData"); 

在那里我有串"imageData"我需要一个字节缓冲区为我的形象。我如何得到这个?该图像位于Eclipse的src文件夹中。

+0

ByteBuffer.allocateDirect(...) – bestsss

+0

这会怎么做? – Alex

回答

0

这是未经测试,但看起来像它的工作

ByteBuffer buffer = ByteBuffer.wrap(getBytesFromFile(filename)); 

有在http://www.exampledepot.com/egs/java.io/File2ByteArray.html

编辑getBytesFromFile的实现:好的那个例子真的现在没有了,所以这里的阅字节缓冲区实现

private static ByteBuffer readToBuffer(String filename) throws IOException 
{ 
    File file = new File(filename); 
    ByteBuffer bb = ByteBuffer.allocate((int) file.length()); 
    FileInputStream fis = new FileInputStream(filename); 

    int bytesRead = 0; 
    byte[] buf = new byte[BYTES_PER_READ]; 

    while (bytesRead != -1) 
    { 
     bb.put(buf, 0, bytesRead); 
     bytesRead = fis.read(buf); 
    } 

    fis.close(); 

    return bb; 
} 
+0

页面上找不到链接。 – Alex

+0

该链接适用于我,无论如何,它可以通过搜索“java read file as bytes”轻松找到。 – jeff

+0

只有当图像是一个已经以opengl喜欢的正确格式编码的原始图像时,这才起作用。所以像Bmp Png Jpg gif这样的图像将不起作用 – Arne