Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 Can';在LWJGL中绘制1280x800纹理_Java_Opengl_Lwjgl_Slick2d - Fatal编程技术网

Java Can';在LWJGL中绘制1280x800纹理

Java Can';在LWJGL中绘制1280x800纹理,java,opengl,lwjgl,slick2d,Java,Opengl,Lwjgl,Slick2d,我的图像是1280x800,我的屏幕大小是1280x800。它应该画得很好。但现在它在我的屏幕左上角画了一个正方形的纹理,它超出了比例,不够大。我不知道为什么它不起作用,我试着在画图时把纹理的大小写得更大,看起来效果更好,但我不知道为什么在1280x800四元网格上画图时它不起作用 这是我的OPENGL和显示设置代码: try { DisplayMode displayMode = null; DisplayMode[] modes = Display

我的图像是1280x800,我的屏幕大小是1280x800。它应该画得很好。但现在它在我的屏幕左上角画了一个正方形的纹理,它超出了比例,不够大。我不知道为什么它不起作用,我试着在画图时把纹理的大小写得更大,看起来效果更好,但我不知道为什么在1280x800四元网格上画图时它不起作用

这是我的OPENGL和显示设置代码:

    try {

        DisplayMode displayMode = null;
        DisplayMode[] modes = Display.getAvailableDisplayModes();

        for (int i = 0; i < modes.length; i++) {
            if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
                displayMode = modes[i];
            }
        }

        Display.setDisplayMode(displayMode);
        Display.setFullscreen(false);
        Display.create();

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

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);

编辑:在搜索了几个小时后,我发现,我找到了一个奇怪的解决方案,在我看来,我制作了2048x1024图像,留下了额外的空白。成功了。但这就是它应该如何工作的?所以我假设所有图像大小都是2的幂,剩下多余的空间是空的?或者有更好的方法吗?

这里确实没有足够的信息,但我怀疑您有一个非常古老的OpenGL实现(2.0之前)

早期版本的OpenGL无法使用两种纹理的非幂函数。加载前必须重新缩放(拉伸以适应)图像,或者在调整大小和修改纹理坐标后将部分图像留空

如果您有一个合法的OpenGL 2.0实现,它将支持两种纹理的非增强功能。早在OpenGL 2.0时代,驱动程序供应商就没有很好地满足这些要求,并且经常声称要实现OpenGL版本,无论主机硬件是否真正满足所有要求。两种纹理的非功能可能是最大的缺陷,这个时代的许多硬件可以处理OpenGL2.0所需的一切,除了NPOT纹理


在任何情况下,如果您所在的平台不能保证OpenGL 2.0,在使用npot纹理之前,您应该检查扩展名
GL\u ARB\u texture\u non\u power\u of_two

我认为这可能是LWJGL的问题。
    background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));
    girl_01 = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/girl_01.png")));
    girl_02 = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/girl_02.png")));

    glBindTexture(GL_TEXTURE_2D, background.getTextureID());
    glPushMatrix();
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0);
    glVertex2f(0, 0); // Upper left

    glTexCoord2f(1, 0);
    glVertex2f(World.SCREEN_WIDTH, 0); // Upper right

    glTexCoord2f(1, 1);
    glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right

    glTexCoord2f(0, 1);
    glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
    glEnd();
    glPopMatrix();