Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Opengl 在LWJGL中绘制立方体时遇到问题_Opengl_Lwjgl_Cube_Depth - Fatal编程技术网

Opengl 在LWJGL中绘制立方体时遇到问题

Opengl 在LWJGL中绘制立方体时遇到问题,opengl,lwjgl,cube,depth,Opengl,Lwjgl,Cube,Depth,我正在尝试学习如何编写一些代码来绘制立方体并旋转它。我决定用三角形画它们,在我画了立方体的三个面之后,我很快意识到有一个问题,立方体的白色面将与红色和蓝色面重叠,蓝色面将与红色面重叠 我确实注意到: -最后画一张白脸 -蓝色的脸在白色的脸之前画 -红色的脸先画蓝色的脸 我怀疑这可能是造成问题的原因,因为白色在蓝色上面,蓝色在红色上面 我走对了吗?有人能帮我找到解决这个问题的办法吗 import org.lwjgl.LWJGLException; import org.lwjgl.opengl.D

我正在尝试学习如何编写一些代码来绘制立方体并旋转它。我决定用三角形画它们,在我画了立方体的三个面之后,我很快意识到有一个问题,立方体的白色面将与红色和蓝色面重叠,蓝色面将与红色面重叠

我确实注意到: -最后画一张白脸 -蓝色的脸在白色的脸之前画 -红色的脸先画蓝色的脸

我怀疑这可能是造成问题的原因,因为白色在蓝色上面,蓝色在红色上面

我走对了吗?有人能帮我找到解决这个问题的办法吗

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

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

public class RubiksCube {

    int angle = 0;

    public void start() {

        final int width = 800;
        final int height = 600;
        try {
            Display.setDisplayMode(new DisplayMode(width, height));
            Display.create();
        } catch (LWJGLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.exit(0);
        }

        // init OpenGL here

        while (!Display.isCloseRequested()) {  
            render();

            angle = (angle+1)%360;
            Display.update();
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        Display.destroy();
    }

    public void render(){

        float edgeLength= 20.0f;
        edgeLength /= 2.0f;

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0.0f, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight(), 0.0f, -50.0f, 50.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear screen
        glPushMatrix();
        glTranslatef((Display.getWidth()/2), (Display.getHeight()/2), 0.0f);
        glRotatef(angle, 1.0f, 1.0f, 1.0f);
        glBegin(GL_TRIANGLES);

        //Back

        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex3f(-edgeLength, edgeLength, edgeLength);
        glVertex3f(-edgeLength, -edgeLength, edgeLength);
        glVertex3f(edgeLength, -edgeLength, edgeLength);
        glVertex3f(-edgeLength, edgeLength, edgeLength);
        glVertex3f(edgeLength, edgeLength, edgeLength);
        glVertex3f(edgeLength, -edgeLength, edgeLength);

        //Front

        glColor3f(0.0f, 0.0f, 1.0f);
        glVertex3f(-edgeLength, edgeLength, -edgeLength);
        glVertex3f(-edgeLength, -edgeLength, -edgeLength);
        glVertex3f(edgeLength, -edgeLength, -edgeLength);
        glVertex3f(-edgeLength, edgeLength, -edgeLength);
        glVertex3f(edgeLength, edgeLength, -edgeLength);
        glVertex3f(edgeLength, -edgeLength, -edgeLength);

        // Right
        glColor3f(1.0f, 1.0f, 1.0f);
        glVertex3f(edgeLength, edgeLength, -edgeLength);
        glVertex3f(edgeLength, -edgeLength, -edgeLength);
        glVertex3f(edgeLength, -edgeLength, edgeLength);
        glVertex3f(edgeLength, edgeLength, -edgeLength);
        glVertex3f(edgeLength, edgeLength, edgeLength);
        glVertex3f(edgeLength, -edgeLength, edgeLength);

        glEnd();
        glPopMatrix();
    }
}

请求深度缓冲区并通过glEnableGL_depth_TEST启用深度测试