0
我試圖弄清楚爲什麼我不能得到任何紋理與LWJGL 3.我已經試過多種方法來加載(PNGDecoder,STB,BufferedImage的),並渲染紋理渲染。但結果總是一個白色的四邊形。LWJGL紋理渲染不
主類:
public static void main(String[] args)
{
glfwInit();
window = glfwCreateWindow(640, 480, "TEST", 0, 0);
glfwShowWindow(window);
glfwMakeContextCurrent(window);
GL.createCapabilities();
GL11.glEnable(GL11.GL_TEXTURE_2D);
Loader loader = new Loader();
TestRenderer renderer = new TestRenderer();
ModelTexture texture = new ModelTexture(loader.loadTextureManual("blue"));
while(!glfwWindowShouldClose(window))
{
glfwPollEvents();
renderer.prepare();
renderer.renderWithFixedFunctions(texture);
glfwSwapBuffers(window);
clearErrorBuffer(true);
}
loader.cleanUp();
}
載入方法
public int loadTextureManual(String fileName)
{
String imagePath = "./res/" + fileName + ".png";
try {
System.out.println("Trying to load texture \""+imagePath+"\"");
BufferedImage bi = ImageIO.read(new File(imagePath));
int width = bi.getWidth();
int height = bi.getHeight();
int[] pixels_raw = new int[width*height];
pixels_raw = bi.getRGB(0, 0, width, height, null, 0, width);
ByteBuffer pixels = BufferUtils.createByteBuffer(width*height*4);
for(int i = 0; i < width; i++)
{
for(int j = 0; j < height; j++)
{
int pixel = pixels_raw[i*width+j];
pixels.put((byte) ((pixel >> 16) & 0xFF)); //RED
pixels.put((byte) ((pixel >> 8) & 0xFF)); //GREEN
pixels.put((byte) ((pixel) & 0xFF)); //BLUE
pixels.put((byte) ((pixel >> 24) & 0xFF)); //ALPHA
}
}
pixels.flip();
byte[] info = new byte[pixels.capacity()];
pixels.get(info);
int textureID = GL11.glGenTextures();
if(GL.getCapabilities().GL_EXT_texture_filter_anisotropic)
{
float amount = Math.min(ANISOTROPIC_FILTERING_AMOUNT, GL11.glGetFloat(EXTTextureFilterAnisotropic.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
GL11.glTexParameterf(GL11.GL_TEXTURE_2D, EXTTextureFilterAnisotropic.GL_TEXTURE_MAX_ANISOTROPY_EXT, amount);
}
else
{
System.out.println("Anisotropic filtering not supported!");
}
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0,
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixels);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID);
return textureID;
}
catch (Exception e)
{
e.printStackTrace();
System.err.println("Couldn'l load texture \""+imagePath+"\"");
System.exit(-1);
}
return 0;
}
呈現方法:
public void renderWithFixedFunctions(ModelTexture texture)
{
glBindTexture(GL_TEXTURE_2D, texture.getID());
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-0.5f, 0.5f);
glTexCoord2f(0, 1);
glVertex2f(0.5f, 0.5f);
glTexCoord2f(1, 1);
glVertex2f(0.5f, -0.5f);
glTexCoord2f(1, 0);
glVertex2f(-0.5f, -0.5f);
glEnd();
}
的ModelTexture類只是存儲一些信息是不正確的,現在使用和藍色巴紐是16×16的PNG文件。
這是在啓動程序時,我得到的輸出:
感謝那些幫助了,但是還有其他兩個問題。 1.我用glTexImage2D glBindTexture 2.之前,我已經創建了在Windows 8上油漆的PNG圖像和他們不工作。我甚至不能打開它們與PS CS5但其他可以打開它們。 – Wendelin