我需要在我的OpenGL初始化方法中添加什么以启用深度测试,我如何将其用于纹理层叠?
我必须将glOrtho的最后一个参数扩展到比-1更极端的值,并且当然要启用深度测试。然后要使用它,我可以假设我改变glVertex的第三个参数为不为0的值,以便将其发送到其他纹理的前面或后面。
我尝试了这个方法,但是该死的纹理甚至都没有显示。 xD 我应该漏掉了什么。
编辑:关于Tim的回复
每当我将图像的z坐标设置得比-1更极端时,它就不会显示,屏幕只会变成黑色。
我必须将glOrtho的最后一个参数扩展到比-1更极端的值,并且当然要启用深度测试。然后要使用它,我可以假设我改变glVertex的第三个参数为不为0的值,以便将其发送到其他纹理的前面或后面。
我尝试了这个方法,但是该死的纹理甚至都没有显示。 xD 我应该漏掉了什么。
编辑:关于Tim的回复
每当我将图像的z坐标设置得比-1更极端时,它就不会显示,屏幕只会变成黑色。
void initGL(){
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_DEPTH_TEST); //depth test enabled
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glOrtho(-width/2, width/2, -height/2, height/2, 1, -10);//far changed to -10
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
并且
void loadBG(int theLoadedOne){
GL11.glBindTexture(GL11.GL_TEXTURE_2D, theLoadedOne);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0,0);
GL11.glVertex3f(-width/2,height/2, -2);//new z value
GL11.glTexCoord2f(1,0);
GL11.glVertex3f(width/2,height/2,-2);//new z value
GL11.glTexCoord2f(1,1);
GL11.glVertex3f(width/2,-height/2,-2);//new z value
GL11.glTexCoord2f(0,1);
GL11.glVertex3f(-width/2,-height/2,-2);//new z value
GL11.glEnd();
GL11.glFlush();
}
并且
while(!Display.isCloseRequested()){
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
...
for(int i=0;i<1;i++){ //dont mind this for loop
bg.loadThisBG(0); //its here for reasons
}
updateFPS();
Display.update();
} Display.destroy();
}