Résolu Une question sur le tesselator(DrawTextureModalRect)
-
Bonjour,
je cherche a changer la position d’une texture que je draw a l’écran via tesselator et j’ai jamais trop utilisé la tesselation ducoup je suis un peu perdu
if (props.getCurrentDrugs() == 3){ GL11.glBlendFunc(770, 771); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDepthMask(false); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_ALPHA_TEST); FMLClientHandler.instance().getClient().renderEngine.bindTexture(clean); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.draw(); GL11.glDepthMask(true); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); }
j’aimerai préciser les coordonnée X, Y de la texture clean
merci d’avance
-
J’ai pas compris ce que tu voulais faire. La classe Tesselator est faite pour dessiner des objets en 2D principalement, mais tu peux l’utiliser pour dessiner des blocks ou Items en 3D mais c’est plus simple d’utiliser l’openGL pour çà. D’après ce que je vois tu utilises un mélange d’openGL et de Tesselator.
-
En fait j essaye de Draw un icône sur l’écran sauf que il se draw en haut a gauche moi je veut que il soit au niveau de la barre de bouffe donc je veut préciser sa position X,Y
-
Tu vas chercher trop loin : il y a un event RenderGameOverlayEvent, sur lequelle tu mets une condition pour savoir si c’est la barre de nourriture qui est dessinée et une fois appelée, tu appelle une méthode drawTextureModalRect (soit venant de la classe GUI, soit tu peux la recopier plus proprement dans ta classe, je te conseille cette dernière solution).
-
Le problème avec ça c est que ça crée des bug de texture sur une barre que je draw de la même façon en gros j ai 3 barre de statut une barre d’expérience custom un barre d’eau et une barre de statut pour la dépendance au drogues la première barre fonctionne parfaitement la deuxième aussi mais des que j’essaye d ajouter l’icône soit l icône se draw dans un carré de 16*16 mais sa taille est égale a celle de l’écran donc on vois que quelques pixel soir le rendu de ma barre d’eau bug en passant par cette méthode avec le tesselator je n’ai plus aucun bug ;S
-
Il faut penser à faire le draw de tes textures dans le POST du RenderGameOverlayEvent. Je comprends pas trop ce que çà fait, envoi une screenshot.
-
j’ai régler le problème de rendu de la barre d eau c’était de ma faute reste que l image en 1616 s’affiche toujours en 200200
http://puu.sh/jmFVA/48466318f9.jpg
avec: drawTexturedModalRect(j2-8, k2-20, 1, 1, 16, 16);http://puu.sh/jmG2q/7d44e2e95e.jpg
avec: drawTexturedModalRect(j2-8, k2-100, 1, 1, 120, 120);j’avait pensé a un GL11.gl_scaled mais ça resize toute l interface de minecraft
-
Ton draw est pas bon, voici les paramètres : x,y, offsetX, offsetY, width, height. Dans la plupart des cas (dont le tiens), l’offset devrait être de 0.
Donc : drawTextureModalRect(j2-8, k2 - 100, 0, 0, 16, 16)
-
ça change rien toujours carré blanc comme dans le 1er cas
au cas ou je drop le codeif (props.getCurrentDrugs() == 3){ ScaledResolution scaledresolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); int k = scaledresolution.getScaledWidth(); int l = scaledresolution.getScaledHeight(); int j2; int k2; j2 = (k - this.mc.fontRenderer.getStringWidth("")) / 2; k2 = l - 31 - 4; this.mc.getTextureManager().bindTexture(clean); drawTexturedModalRect(j2-8, k2-100, 0, 0, 16, 16); }
-
Rajoute un Gl11.glScalef.
Petit conseil : fait le draw en x = y = 0. Et déplace le avec un GL11.glTranslate, comme ceci :
GL11.glPushMatrix() GL11.glTranslatef(x, y 0.0F) // C'est du 2D donc pas de translation sur l'axe Z float scale = 2.0F; GL11.glScalef(scale, scale, 0.0F) drawTextureModalRect(0,0,0,0, 16, 16) GL11.glPopMatrix()
En fait, le width et le height sont ceux de la texture, pas du fichier.
-
ok je comprend mieux j’avais mal compris la méthode drawTextureModalRect je pensait que c’était la taille du fichier ;S
ca fonctionne toujours pas:
http://puu.sh/jmQ9Q/22ab6817d1.jpgle carré a juste un couleur au lieu du blanc d’avant j’ai changer le scalef a 1.0 toujours pareil et si je le diminue encore ça réduit le cadre la taille du DrawTextureModalRect pas l’image en elle même
-
Renvoi ton code + la fonction drawTexturemModalRect().
-
Le voici
if (props.getCurrentDrugs() == 3){ ScaledResolution scaledresolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); int k = scaledresolution.getScaledWidth(); int l = scaledresolution.getScaledHeight(); int j2; int k2; j2 = (k / 2); k2 = l - 31 - 4; this.mc.getTextureManager().bindTexture(clean); GL11.glPushMatrix(); GL11.glTranslatef(j2-8, k2-20, 0.0F); // C'est du 2D donc pas de translation sur l'axe Z float scale = 1.0F; GL11.glScalef(scale, scale, 0.0F); drawTexturedModalRect(0, 0, 0, 0, 16, 16); GL11.glPopMatrix(); }
-
@‘SCAREX’:
Renvoi ton code + la fonction drawTexturemModalRect().
-
vu que j extend gui j’utilise la fonction DrawTextureModalRect de celui-ci
public void drawTexturedModalRect(int p_73729_1_, int p_73729_2_, int p_73729_3_, int p_73729_4_, int p_73729_5_, int p_73729_6_) { float f = 0.00390625F; float f1 = 0.00390625F; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + p_73729_6_), (double)this.zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1)); tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + p_73729_6_), (double)this.zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1)); tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + 0), (double)this.zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + 0) * f1)); tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + 0), (double)this.zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + 0) * f1)); tessellator.draw(); }
cette méthode ci
-
Essaie de mettre 256 en taille et de diminuer le scale, la taille doit être donnée en base 256.
-
c’était ça merci encore du coup de main je passe en resolut