2012-06-29 214 views
0

我正尝试用2D纹理创建几个3D块,但不工作,因为立方体的某些边对其他人是透明的。 下面是从类代码的一部分,我定义块:Java Opengl 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); 

    } 

我怎样才能解决透明度的问题?

回答

2

将以下代码放入初始化块中:

glEnable(GL_DEPTH_TEST);