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 为什么可以';我从OpenGL中的图像文件加载矩形吗?_Java_Opengl_Lwjgl - Fatal编程技术网

Java 为什么可以';我从OpenGL中的图像文件加载矩形吗?

Java 为什么可以';我从OpenGL中的图像文件加载矩形吗?,java,opengl,lwjgl,Java,Opengl,Lwjgl,我做了一些代码,每当我的代码在我的水平图像中遇到一个白色像素时,我就会生成一些框。然而,它似乎不起作用。只有当我注释掉图像部分的实际加载时,它才起作用 GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glOrtho(-5, 5, -5, 5, -20, 20); GL11.glMatrixMode(GL11.GL_MODELVIEW); float camPosX

我做了一些代码,每当我的代码在我的水平图像中遇到一个白色像素时,我就会生成一些框。然而,它似乎不起作用。只有当我注释掉图像部分的实际加载时,它才起作用

        GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(-5, 5, -5, 5, -20, 20);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    float camPosX=0, camPosY=0;
    for(int i=0;i<level.getWidth();i++){
        for(int j=0;j<level.getHeight();j++){
            if(level.getRGB(i, j)==Color.red.getRGB()){camPosX=i;camPosY=j;}
        }
    }
    System.out.println("Camera position is "+camPosX+", "+camPosY);
    int x=0;
    while (!Display.isCloseRequested()) {
        Display.sync(60);
        //poll for keypresses first, default key is 'forward'
        if(Keyboard.isKeyDown(Keyboard.KEY_NUMPAD8));



        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT|GL11.GL_COLOR_BUFFER_BIT);
        //GL11.glEnable(GL11.GL_CULL_FACE);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glColor3f(0, 0, 0);
        for(int i=0;i<level.getWidth();i++){
            for(int j=0;j<level.getHeight();j++){
                if(level.getRGB(i, j)==Color.WHITE.getRGB()){
                    GL11.glTranslatef(-i, 0, -j);
                    GL11.glRotatef(45, 1, 1, 1);
                    GL11.glBegin(GL11.GL_QUADS);
                    GL11.glColor3f(1.0f,0.0f,0.0f);          // Set The Color To Red
                    GL11.glVertex3f( 0.5f, 0.5f, 0.5f);          // Top Right Of The Quad (Front)
                    GL11.glVertex3f(-0.5f, 0.5f, 0.5f);          // Top Left Of The Quad (Front)
                    GL11.glVertex3f(-0.5f,-0.5f, 0.5f);          // Bottom Left Of The Quad (Front)
                    GL11.glVertex3f( 0.5f,-0.5f, 0.5f);          // Bottom Right Of The Quad (Front)
                    GL11.glVertex3f( 0.5f,-0.5f,-0.5f);          // Bottom Left Of The Quad (Back)
                    GL11.glVertex3f(-0.5f,-0.5f,-0.5f);          // Bottom Right Of The Quad (Back)
                    GL11.glVertex3f(-0.5f, 0.5f,-0.5f);          // Top Right Of The Quad (Back)
                    GL11.glVertex3f( 0.5f, 0.5f,-0.5f);          // Top Left Of The Quad (Back)
                    GL11.glVertex3f(-0.5f, 0.5f, 0.5f);          // Top Right Of The Quad (Left)
                    GL11.glVertex3f(-0.5f, 0.5f,-0.5f);          // Top Left Of The Quad (Left)
                    GL11.glVertex3f(-0.5f,-0.5f,-0.5f);          // Bottom Left Of The Quad (Left)
                    GL11.glVertex3f(-0.5f,-0.5f, 0.5f);          // Bottom Right Of The Quad (Left)
                    GL11.glVertex3f( 0.5f, 0.5f,-0.5f);          // Top Right Of The Quad (Right)
                    GL11.glVertex3f( 0.5f, 0.5f, 0.5f);          // Top Left Of The Quad (Right)
                    GL11.glVertex3f( 0.5f,-0.5f, 0.5f);          // Bottom Left Of The Quad (Right)
                    GL11.glVertex3f( 0.5f,-0.5f,-0.5f);          // Bottom Right Of The Quad (Right)
                    GL11.glEnd();
                    GL11.glLoadIdentity();
                }
            }
        }
        GL11.glTranslatef(-camPosX, 0, -camPosY);
        Display.update();
    }
GL11.glMatrixMode(GL11.glu投影);
GL11.glLoadIdentity();
GL11.glOrtho(-5,5,-5,5,-20,20);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
浮动camPosX=0,camPosY=0;

对于(inti=0;i在生成框的主循环中,您可能需要执行以下操作

...
if(level.GetRGB(i, j)==Color.WHITE.getRGB()) {
    GL11.glPushMatrix(); // store current matrix
    GL11.glTranslatef(-i, 0, -j);
    ...
    GL11.glPopMatrix(); // instead of GL11.glLoadIdentity()
}
线路

GL11.glTranslatef(-camPosX, 0, -camPosY);

可能与您认为的不一样。它对以下调用
Display.update()
没有任何影响。但是,它将影响主循环的下一次运行,因为您没有调用
GL11.glLoadIdentity()
在主循环的开头。我建议将其移动到主循环的开头,并在之前调用
glLoadIdentity()

它仍然没有正确显示(仍然是黑屏),但我很高兴这些问题得到了解决。谢谢!