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 bien 🙂

    Voici 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


  • Modérateurs

    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 aider 😉

    Sent from my GT-I9000 using Tapatalk 2