OpenGL et la transparence
-
Hey
Voila le contexte, je veux mettre un chunk dans une boite translucide et ça fonctionne presque.
Enfait, selon le coté ou je regarde ça marche plus ou moins bienVoici quelques screens, suivit du code :
Le coté qui va bien :
Les autres :
Voici le code concerné :
private void highligthChunk(ForgeFactionChunk c) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; int xPos = c.xPosition<<4; int zPos = c.zPosition<<4; drawChunkFaceY(player, xPos, zPos); drawChunkFaceX(player, xPos, zPos); drawChunkFaceX(player, xPos+16, zPos); drawChunkFaceZ(player, xPos, zPos); drawChunkFaceZ(player, xPos, zPos+16); } private void drawChunkFaceX(EntityPlayer player, int xPos, int zPos) { if(player.posX < xPos) { GL11.glVertex3f(xPos,player.worldObj.getActualHeight(),zPos); GL11.glVertex3f(xPos,0,zPos); GL11.glVertex3f(xPos,0,zPos+16); GL11.glVertex3f(xPos,player.worldObj.getActualHeight(),zPos+16); }else { GL11.glVertex3f(xPos,player.worldObj.getActualHeight(),zPos+16); GL11.glVertex3f(xPos,0,zPos+16); GL11.glVertex3f(xPos,0,zPos); GL11.glVertex3f(xPos,player.worldObj.getActualHeight(),zPos); } } private void drawChunkFaceY(EntityPlayer player, int xPos, int zPos) { int y = player.worldObj.getActualHeight(); if(player.posY < y) { GL11.glVertex3f(xPos+16,y,zPos+16); GL11.glVertex3f(xPos,y,zPos+16); GL11.glVertex3f(xPos,y,zPos); GL11.glVertex3f(xPos+16,y,zPos); }else { GL11.glVertex3f(xPos+16,y,zPos); GL11.glVertex3f(xPos,y,zPos); GL11.glVertex3f(xPos,y,zPos+16); GL11.glVertex3f(xPos+16,y,zPos+16); } } private void drawChunkFaceZ(EntityPlayer player, int xPos, int zPos) { if(player.posZ < zPos) { GL11.glVertex3f(xPos+16,player.worldObj.getActualHeight(),zPos); GL11.glVertex3f(xPos+16,0,zPos); GL11.glVertex3f(xPos,0,zPos); GL11.glVertex3f(xPos,player.worldObj.getActualHeight(),zPos); }else { GL11.glVertex3f(xPos,player.worldObj.getActualHeight(),zPos); GL11.glVertex3f(xPos,0,zPos); GL11.glVertex3f(xPos+16,0,zPos); GL11.glVertex3f(xPos+16,player.worldObj.getActualHeight(),zPos); } }
Avez-vous une petite idée de comment faire pour résoudre ce problème ? Merci
-
Renseigne toi sur le Z-Buffer pour OpenGL, c’est un truc qui apparait souvent quand on fait un render de cube basique, ou les faces passent devant les autres, alors qu’elles sont derrière
-
Il faut aussi dessiner les faces dans l’ordre: les plus loin en premier, les plus proches en dernier en activant GL_ALPHA_TEST et en donnant une valeur de référence pour l’alpha via glAlphaFunc (ou Ref je sais plus) comme 0.001f par exemple.
Essaie ça, cela devrait aiderSent from my GT-I9000 using Tapatalk 2