LWJGL中的纹理不显示

时间:2017-01-08 05:05:27

标签: java 2d png textures lwjgl

我正在尝试使用LWJGL库在Eclipse中显示png作为纹理。我确保绑定纹理并在绘制顶点之前设置坐标,但图像仍然没有显示。可能是什么问题?

package javagame;

import static org.lwjgl.opengl.GL11.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.Color;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;

@SuppressWarnings("unused")
public class ImageLWJGL {
    public static Texture p;

    public static void main(String[] args) {
        createDisplay();
        createGL();

        render();

        cleanUp();

    }

    private static void createDisplay(){        
        try {
            Display.setDisplayMode(new DisplayMode(800,600));
            Display.create();
            Display.setVSyncEnabled(true);

        } catch (LWJGLException e) {
            e.printStackTrace();
        }
    }

    public static void createGL(){
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();               
        glOrtho(0, Display.getWidth(), 0, Display.getHeight(), -1, 1);      

        glMatrixMode(GL_MODELVIEW);     

        glClearColor(0,0,0,1);          
        glDisable(GL_DEPTH_TEST);
        glEnable(GL_TEXTURE_2D);

    }


    private static  void render(){
        while(!Display.isCloseRequested()){

        try {
             p = TextureLoader.getTexture("PNG", 
                            new FileInputStream(new     File("res/wood.png")));
        } catch (IOException e) {

            e.printStackTrace();
        }



        glClear(GL_COLOR_BUFFER_BIT);
        glLoadIdentity();

        glColor3f(0.25f,0.75f,0.5f);        


        p.bind();

        glBegin(GL_QUADS);

        glTexCoord2f(0,0);
        glVertex2f(0,0);                    // (origin, origin)

        glTexCoord2f(0,1);
        glVertex2f(0,p.getHeight());        // (origin, y-axis)-height

        glTexCoord2f(1,1);
        glVertex2f(p.getWidth(),p.getHeight());     // (x-axis, y-axis)

        glTexCoord2f(1,0);
        glVertex2f(p.getWidth(),0);             // (x-axis, origin)-width


        glEnd();

        Display.update();
        }

    }




private static void cleanUp(){
    Display.destroy();

}

}

1 个答案:

答案 0 :(得分:0)

您的问题是您的Ortho Projection Matrix。

glOrtho(0, Display.getWidth(), 0, Display.getHeight(), -1, 1);    

它从0到显示宽度,0到显示高度,但是你将Quad从0渲染到1.所以你的Quad会被渲染,但是对于Small,你可以看到它。
解决问题将glOrtho改为:

glOrtho(0, 1, 0, 1, -1, 1);