Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OpenGL加载图像时出现的问题_Java_Image_Opengl_Load_Lwjgl - Fatal编程技术网

Java 使用OpenGL加载图像时出现的问题

Java 使用OpenGL加载图像时出现的问题,java,image,opengl,load,lwjgl,Java,Image,Opengl,Load,Lwjgl,我在加载图像时遇到问题。这是我得到的:。黑色空间不应该在那里。我不知道我的图像或代码是否有问题。我尝试过其他图像,有些图像可以很好地使用此代码,有些则不行 import java.io.IOException; import org.newdawn.slick.opengl.Texture; import org.newdawn.slick.opengl.TextureLoader; import org.newdawn.slick.util.ResourceLoader; import org

我在加载图像时遇到问题。这是我得到的:。黑色空间不应该在那里。我不知道我的图像或代码是否有问题。我尝试过其他图像,有些图像可以很好地使用此代码,有些则不行

import java.io.IOException;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;
import org.newdawn.slick.Color;
import org.lwjgl.opengl.GL11;

public void init() {
    try {
        texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("sprites/playButton.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void render() {
    texture.bind();
    Color.white.bind();

    GL11.glBegin(GL11.GL_QUADS);
        GL11.glTexCoord2f(0,0);
        GL11.glVertex2f(400-getWidth()/2,250);
        GL11.glTexCoord2f(1,0);
        GL11.glVertex2f(400+getWidth()/2,250);
        GL11.glTexCoord2f(1,1);
        GL11.glVertex2f(400+getWidth()/2,250+getHeight());
        GL11.glTexCoord2f(0,1);
        GL11.glVertex2f(400-getWidth()/2,250+getHeight());
    GL11.glEnd();
}
这是主要的渲染功能

public void start() {
    try {
        Display.setDisplayMode(new DisplayMode(800,600));
        Display.setInitialBackground(255, 255, 255);
        Display.create();
        Display.setVSyncEnabled(true);
    } catch (LWJGLException e) {
        e.printStackTrace();
        System.exit(0);
    }

    // init OpenGL here
    MainMenu mainMenu = new MainMenu();
    mainMenu.init();

    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glShadeModel(GL11.GL_SMOOTH);        
    GL11.glDisable(GL11.GL_DEPTH_TEST);
    GL11.glDisable(GL11.GL_LIGHTING);                    

    GL11.glClearColor(255.0f, 255.0f, 255.0f, 0.0f);                
    GL11.glClearDepth(1);                                       

    GL11.glEnable(GL11.GL_BLEND);
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

    GL11.glViewport(0,0,800,600);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, 800, 600, 0, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

    while (!Display.isCloseRequested()) {
        // render OpenGL here
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);

        mainMenu.render();

        Display.update();
        Display.sync(100);
    }

我认为问题在于你的纹理加载代码。你也能把它贴出来吗?(或者您正在使用库加载纹理?)关于这一行:GL11.glClearColor(255.0f、255.0f、255.0f、0.0f);请注意,openGL的颜色范围在0到1之间。此外,背景的0 alpha可能会导致一些问题。我建议尝试将其设置为1。不幸的是,我不相信LWJGL支持透明窗口。请尝试调用
System.out.println(ResourceLoader.getResourceAsStream(“sprites/playButton.png”)它打印什么?@Bartvbl我添加了一些库,没有其他纹理加载代码。我还将范围颜色和alpha设置为1,但没有任何更改。@Vallentin我似乎无法成功打印它,因为它不断给我错误(标记上的语法错误)。毕竟这是我第一次尝试lwjgl。