Résolu Créer un Gui Overlay
-
Bonjour,
Alors voilà, j’ai voulu créer un Gui Overlay. J’ai donc cherché dans les classes de Minecraft et ai vu la classe GuiIngame. Voyant que GuiForgeIngame héritait de cette classe, et que visiblement le code de rendu de l’interface utilisateur était présent, j’ai créé une class GuiCustomOverlay et ai extend de GuiIngame. Seulement voilà, je ne vois pas trop comment le dessiner (appeler le GUI).J’essaie d’utiliser l’event RenderGameOverlay, mais je ne vois quel code utiliser.
Pouvez-vous éclairer ma lanterne ?
-
Salut,
Il ne faut pas créer une classe extends GuiForgeIngame, il faut entièrement passer l’event RenderGameOverlay. Tu veux faire quoi exactement ? -
Faire un rendu de progress bar (ça je m’en chargerai avec OpenGL et les magnifiques glVertex). Je viens aussi d’essayer quelque chose, mais ça me change la couleur du curseur (drôle mais bon…)
-
En effet cette event est capricieux, ça cause des problèmes.
Ajoute ces deux conditions :
https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/event/RenderEvent.java#L34-L39
Normalement ça règlera le problème. -
Ah merci je teste
PS: Dans ce code, au lieu de désactiver puis réactiver les fonctions de LWJGL, il suffit de se servir des GL11.glPushMatrix() et GL11.glPopMatrix() non ?
EDIT :
J’essaie de dessiner avec LWJGL mais ça marche pas :int mX = event.resolution.getScaledWidth(); int mY = event.resolution.getScaledHeight(); GL11.glPushMatrix(); GL11.glEnable(GL11.GL_BLEND); GL11.glColor4f(0, (1/255)*100, 1.0F, 1.0F); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glBegin(GL11.GL_QUADS); { GL11.glVertex2f(100, 0); GL11.glVertex2f(100, 10); GL11.glVertex2f(0, 10); GL11.glVertex2f(0, 0); } GL11.glEnd(); GL11.glPopMatrix();
-
Up, une idée ?
-
Via un Tessellator ?
-
J’ai essayé mais ça marchait pas. Je vais réessayer au cas où mais bon…
EDIT :
Je confirme, ça ne marche pas, mais le code s’exécute (System.out.println).Code :
@SubscribeEvent public void onRenderGameOverlayEvent(RenderGameOverlayEvent event) { if(event.isCancelable() || event.type != ElementType.EXPERIENCE) { } else { int mX = event.resolution.getScaledWidth(); int mY = event.resolution.getScaledHeight(); GL11.glPushMatrix(); GL11.glEnable(GL11.GL_BLEND); GL11.glColor3f(0, (1/255)*100, 1.0F); GL11.glDisable(GL11.GL_LIGHTING); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); Tessellator tess = Tessellator.instance; tess.startDrawingQuads(); { tess.addVertex(0, 0, 0); tess.addVertex(0, 30, 0); tess.addVertex(100, 30, 0); tess.addVertex(100, 0, 0); } tess.draw(); System.out.println("Test ---------"); GL11.glPopMatrix(); } }
-
Up, help svp
-
Essaye sans la ligne GL11.glPushMatrix(); et GL11.glPopMatrix();
-
ça ne change rien
-
Hum faudrait attendre le message de @xavpok ou quelqu’un d’autre qui s’y connait plus en openGL.
-
Premierement, tu donnes juste des coordonnees xyz avec tess.addVertex, or sans coordonees uv (pareil que 0,0), OpenGL va charger le pixel à 0,0 sur la texture. Etant donné que tu es en olein milieu d’un rendu, la texture a surement un pixel transparent à 0,0
Deuxiement, et là c’est plus de la stabilité qu’autre chose, essaie de mettre des glDisable après tes appels quand tu fais des glEnable avant
Sent from my GT-I9000 using Tapatalk 2
-
Un grand merci, ça marche
Sujet Résolu.