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