java - 使用 LWJGL 和 SlickUtil 显示纹理的问题

标签 java textures lwjgl slick

我尝试了很多,但没有发现我的错误。这是我的代码:

public class Renderer {
public static final int WIDTH = 1080, HEIGHT = 720, FPS = 60;
public static void createDisplay()
{
    try {
        Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT));
        Display.create();
        Display.setVSyncEnabled(true);
    } catch (LWJGLException e) {
        e.printStackTrace();
        System.exit(0);
    }

    GL11.glEnable(GL11.GL_TEXTURE_2D);               

    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);          

        // enable alpha blending
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

        GL11.glViewport(0,0,WIDTH,HEIGHT);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, WIDTH, HEIGHT, 0, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
}

public static void updateDisplay(){
    Display.update();
    Display.sync(FPS);
    glClear(GL_COLOR_BUFFER_BIT);
    glClearColor(0.2f,0.2f,0.2f,1.0f);
}

public static void destroyDisplay()
{
    Display.destroy();
}

public static void renderDisplay(ArrayList<GameObject> render, Camera cam)
{

    Color.white.bind();

    for(GameObject obj: render)
    {

        obj.getTex().bind();
       if(obj instanceof Player)
        {
            glBegin(GL_QUADS);
            glTexCoord2f(0,0);
            glVertex2f(obj.getX()+WIDTH/2-cam.getX(), obj.getY()+HEIGHT/2-cam.getY());
            glTexCoord2f(obj.getTex().getWidth(),0);
            glVertex2f(obj.getX()+WIDTH/2+obj.getSizeX()-cam.getX(), obj.getY()+HEIGHT/2-cam.getY());
            glTexCoord2f(obj.getTex().getWidth(),obj.getTex().getHeight());
            glVertex2f(obj.getX()+WIDTH/2+obj.getSizeX()-cam.getX(), obj.getY()+HEIGHT/2+obj.getSizeY()-cam.getY());
            glTexCoord2f(0,obj.getTex().getHeight());
            glVertex2f(obj.getX()+WIDTH/2-cam.getX(), obj.getY()+HEIGHT/2+obj.getSizeY()-cam.getY());
            glEnd();
        }else{
            glBegin(GL_QUADS);
            glTexCoord2f(0,0);
            glVertex2f((obj.getX()-cam.getX()), (obj.getY()-cam.getY()));
            glTexCoord2f(1,0);
            glVertex2f((obj.getX()-cam.getX())+obj.getSizeX(), (obj.getY()-cam.getY()));
            glTexCoord2f(1,1);
            glVertex2f((obj.getX()-cam.getX())+obj.getSizeX(), (obj.getY()-cam.getY())+obj.getSizeY());
            glTexCoord2f(0,1);
            glVertex2f((obj.getX()-cam.getX()), (obj.getY()-cam.getY())+obj.getSizeY());
            glEnd();

        }
        obj.getTex().release(); 
    }

}

没有错误,只是没有显示纹理。我使用这种方法来加载图像:

public static Texture getTex(String path)
{
    Texture texture = null;
    try {
        texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream(path));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Display.destroy();
        System.exit(1);
    } catch (IOException e) {
        e.printStackTrace();
        Display.destroy();
        System.exit(1);
    }
    return texture;
}

这是我的主要游戏循环:

public static Player player = new Player(0, 0, 0, 0, 20, 20, 2, null);
public static Camera cam = new Camera(0, 0);
static ArrayList<GameObject> toRender = new ArrayList<GameObject>();

public static void main(String[] args) {
    Renderer.createDisplay();
    toRender.add(new Wall(300, 300, 200, 100, IO.getTex("res/Terrain/Grass.png")));
    toRender.add(player);   
    player.setTex(IO.getTex("res/Entities/Player/Player.png"));
    while(!Display.isCloseRequested())
    {
        Renderer.updateDisplay();
        Input.updateInput();
        player.update();
        Renderer.renderDisplay(toRender, cam);
    }
    Renderer.destroyDisplay();
    System.exit(0);
}

它只是显示了一个白色的四边形,而不是一个有纹理的四边形。

最佳答案

要在 LWJGL 四边形上使用光滑渲染纹理负载,您需要在绘制四边形之前绑定(bind)纹理

尝试一下

texture.bind(); //texture = your Texture name

之前

glBegin(GL_QUADS);

关于java - 使用 LWJGL 和 SlickUtil 显示纹理的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037009/

相关文章:

java - "static final int"是什么意思?

java - Wavefront .obj .Mtl 结构

java - 使用stb_image的stbi_load

java - 在 Java 中将 3D int 数组转换为八叉树

java - OpenClover - 开始使用 AspectJ

java - 如何控制JSeparator的大小?

java - 调用一个重载的方法,其中所有参数都实现相同的接口(interface)

java - Minecraft 纹理未加载 1.7.10

ipad - iPad 上可用的最大纹理尺寸是多少?

Java:Mac 上的 Activity 监视器与 JVisualVM 中的内存消耗