Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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_Lwjgl - Fatal编程技术网

Java Opengl三维渲染

Java Opengl三维渲染,java,lwjgl,Java,Lwjgl,我正在尝试使用2D纹理创建几个3D块,但不起作用,因为立方体的某些面对其他面是透明的。 下面是我定义块的类中的一部分代码: public void Render(){ try { this.texture = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/gold1.png"))); } catch (FileNotFoundException e) {

我正在尝试使用2D纹理创建几个3D块,但不起作用,因为立方体的某些面对其他面是透明的。 下面是我定义块的类中的一部分代码:

    public void Render(){

            try {
        this.texture = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/gold1.png")));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    squareDisplayList = glGenLists(1);
    glNewList(squareDisplayList, GL_COMPILE);
    {

        glBegin(GL_QUADS);
        //trás
        glTexCoord2f(1, 0);
        glVertex3f(x2, y1, z1);
        glTexCoord2f(1, 1);
        glVertex3f(x2, y2, z1);
        glTexCoord2f(0, 1);
        glVertex3f(x1, y2, z1);
        glTexCoord2f(0, 0);
        glVertex3f(x1, y1, z1);

        //cima
        glTexCoord2f(1, 0);
        glVertex3f(x2, y1, z2);
        glTexCoord2f(1, 1);
        glVertex3f(x1, y1, z2);
        glTexCoord2f(0, 1);
        glVertex3f(x1, y1, z1);
        glTexCoord2f(0, 0);
        glVertex3f(x2, y1, z1);

        //baixo
        glTexCoord2f(1, 0);
        glVertex3f(x2, y2, z1);
        glTexCoord2f(1, 1);
        glVertex3f(x2, y2, z2);
        glTexCoord2f(0, 1);
        glVertex3f(x1, y2, z2);
        glTexCoord2f(0, 0);
        glVertex3f(x1, y2, z1);

        //direito
        glTexCoord2f(1, 0);
        glVertex3f(x2, y1, z2);
        glTexCoord2f(1, 1);
        glVertex3f(x2, y2, z2);
        glTexCoord2f(0, 1);
        glVertex3f(x2, y2, z1);
        glTexCoord2f(0, 0);
        glVertex3f(x2, y1, z1);

        //esquerdo
        glTexCoord2f(1, 0);
        glVertex3f(x1, y1, z2);
        glTexCoord2f(1, 1);
        glVertex3f(x1, y2, z2);
        glTexCoord2f(0, 1);
        glVertex3f(x1, y2, z1);
        glTexCoord2f(0, 0);
        glVertex3f(x1, y1, z1);

        //frente
        glTexCoord2f(1, 0);
        glVertex3f(x2, y1, z2);
        glTexCoord2f(1, 1);
        glVertex3f(x2, y2, z2);
        glTexCoord2f(0, 1);
        glVertex3f(x1, y2, z2);
        glTexCoord2f(0, 0);
        glVertex3f(x1, y1, z2);
        glEnd();

    }
    glEndList();

}

 public void Draw(){

    glCallList(squareDisplayList);

}
这是我称之为几个块的类:

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective((float) 30, 880f / 580f, 0.001f,100);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);

    for(int ix = 0; ix < world_width; ix++){

        for(int iy = 0; iy < world_hight; iy++){    

            for(int iz = 0; iz < world_height; iz++){

                render[ix][iy][iz].Render();

            }

        }

    }   

    while(!Display.isCloseRequested()){

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glTranslatef(xspeed, -jumpsd, zspeed);

        for(int ix = 0; ix < world_width; ix++){

            for(int iy = 0; iy < world_hight; iy++){    

                for(int iz = 0; iz < world_height; iz++){

                    render[ix][iy][iz].Draw();

                }

            }

        }

        Display.update();
        Display.sync(35);

    }
glMatrixMode(GL_投影);
glLoadIdentity();
(浮子)30880F/580f,0.001f,100;
glMatrixMode(GLU模型视图);
glEnable(GL_纹理_2D);
对于(int-ix=0;ix

如何解决透明度问题?

在初始化块中放入以下代码:glEnable(GL\u深度\u测试)

glEnable(GL_DEPTH_TEST);