-1
我必須解決這個問題,以下是我做到了,的OpenGL不會綁定我的質地
在RenderEngine綁定代碼:
public int bindTexture(String location)
{
BufferedImage texture;
File il = new File(location);
if(textureMap.containsKey(location))
{
glBindTexture(GL_TEXTURE_2D, textureMap.get(location));
return textureMap.get(location);
}
try
{
texture = ImageIO.read(il);
}
catch(Exception e)
{
texture = missingTexture;
}
try
{
int i = glGenTextures();
ByteBuffer buffer = BufferUtils.createByteBuffer(texture.getWidth() * texture.getHeight() * 4);
Decoder.decodePNGFileToBuffer(buffer, texture);
glBindTexture(GL_TEXTURE_2D, i);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture.getWidth(), texture.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
textureMap.put(location, i);
return i;
}
catch(Exception e)
{
e.printStackTrace();
}
return 0;
}
而且PNG解碼器的方法:
public static void decodePNGFileToBuffer(ByteBuffer buffer, BufferedImage image)
{
int[] pixels = new int[image.getWidth() * image.getHeight()];
image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth());
for(int y = 0; y < image.getHeight(); y++)
{
for(int x = 0; x < image.getWidth(); x++)
{
int pixel = pixels[y * image.getWidth() + x];
buffer.put((byte) ((pixel >> 16) & 0xFF));
buffer.put((byte) ((pixel >> 8) & 0xFF));
buffer.put((byte) (pixel & 0xFF));
buffer.put((byte) ((pixel >> 24) & 0xFF));
}
}
buffer.flip();
}
我希望這可以幫助任何有同樣問題的人 PS textureMap
只是一個以字符串作爲鍵值和整數值作爲值的HashMap
沒有,那沒有工作 – 2012-04-12 09:59:46
那麼,你還需要啓用紋理。 glEnable(GL_TEXTURE_2D) - 在glBegin之前調用它 – datenwolf 2012-04-12 10:09:27