GLUtils, ou comment faire des modèles 3D facilement
-
Bonjour tout le monde !
Pour commencer, merci pour ce super tutoriel, j’ai réussi du premier coup !
Par contre, j’aurai deux petites questions pour pouvoir faire des choses plus poussées avec mon model ^^
Premièrement: Comment ne faire un rendu que des mesh sans la texture, et donner une couleur à ceux-ci ?
et deuxièmement: comment empêcher que l’affichage de mon model ne se limite aux moments ou mon bloc de base est dans mon angle de vue ?Voila, j’espère avoir réussi à me faire comprendre, et sinon, encore chapeau pour le tuto !
-
@‘Sugarshy’:
Bonjour tout le monde !
Pour commencer, merci pour ce super tutoriel, j’ai réussi du premier coup !
Par contre, j’aurai deux petites questions pour pouvoir faire des choses plus poussées avec mon model ^^
Premièrement: Comment ne faire un rendu que des mesh sans la texture, et donner une couleur à ceux-ci ?
et deuxièmement: comment empêcher que l’affichage de mon model ne se limite aux moments ou mon bloc de base est dans mon angle de vue ?Voila, j’espère avoir réussi à me faire comprendre, et sinon, encore chapeau pour le tuto !
1. GL11.glBindTexture(GL11.GL_TEXTURE_2D,0) avant de dessiner le modèle devrait “décrocher” la texture normalement (mais je ne suis pas sûr)
2. Il y a une méthode dans TileEntity qui donne la taille du bloc mais je ne me rappelle plus son nom. Il faut renvoyer Infini Positif pour que ton bloc soit tout le temps affiché -
Pour que le rendu reste toujours activé j’ai réussi en suivant ton conseil (rajouter le code suivant dans mon TileEntity)
@SideOnly(Side.CLIENT) public AxisAlignedBB getRenderBoundingBox() { AxisAlignedBB bb = INFINITE_EXTENT_AABB; return bb; }Par contre je reste coincé pour les Mesh.
J’ai essayé avec le codeglmodel.renderMeshNormals();Mais cela a un léger bug…
Model de base: https://dl.dropboxusercontent.com/u/28128175/2014-10-14_23.00.18.png
Rendu en renderMeshNormals: https://dl.dropboxusercontent.com/u/28128175/2014-10-14_23.26.24.png -
Il ne faut pas utiliser “renderMeshNormals” puisqu’il va dessiner (comme son nom l’indique) les normales de chacun des polygones composant le modèle.
Utilise glColor3f(1,0,0); (ici mets le mesh en rouge)
Puis dessine le model comme tu as fais pour ici: https://dl.dropboxusercontent.com/u/28128175/2014-10-14_23.00.18.png
Et tout devrait être bon -
@‘jglrxavpok’:
Il ne faut pas utiliser “renderMeshNormals” puisqu’il va dessiner (comme son nom l’indique) les normales de chacun des polygones composant le modèle.
Utilise glColor3f(1,0,0); (ici mets le mesh en rouge)
Puis dessine le model comme tu as fais pour ici: https://dl.dropboxusercontent.com/u/28128175/2014-10-14_23.00.18.png
Et tout devrait être bonEn fait c’est presque sa, le truc c’est que je veux pas afficher ma texture, je veux justes les “contours” de mon model, sans sa texture dessus
edit: je veux juste afficher le “wire” sans la texture
-
@‘Sugarshy’:
@‘jglrxavpok’:
Il ne faut pas utiliser “renderMeshNormals” puisqu’il va dessiner (comme son nom l’indique) les normales de chacun des polygones composant le modèle.
Utilise glColor3f(1,0,0); (ici mets le mesh en rouge)
Puis dessine le model comme tu as fais pour ici: https://dl.dropboxusercontent.com/u/28128175/2014-10-14_23.00.18.png
Et tout devrait être bonEn fait c’est presque sa, le truc c’est que je veux pas afficher ma texture, je veux justes les “contours” de mon model, sans sa texture dessus
edit: je veux juste afficher le “wire” sans la texture
Etant donné la structure de l’API, je ne crois pas que cela soit possible, désolé
-
Mince ><
Bon, je vais chercher une autre solution…
merci en tout cas !Ah si, une derniere question, comment faire pour que le model n’ai pas d’ombres ?
-
Avant de le dessiner:
glDisable(GL_LIGHTING);puis après
glEnable(GL_LIGHTING);et c’est tout

-
super, merci !
-
Bon, vu que je me suis dis que je vous ai pas encore assez embêté ^^ :
Je n’arrive pas a appliquer une rotation constante a mon model sur l’axe z -
@‘Sugarshy’:
Bon, vu que je me suis dis que je vous ai pas encore assez embêté ^^ :
Je n’arrive pas a appliquer une rotation constante a mon model sur l’axe zConstante, c’est-à-dire ?
-
@‘jglrxavpok’:
Constante, c’est-à-dire ?
Que dés que je pose mon bloc, il se met a tourner
-
@‘Sugarshy’:
@‘jglrxavpok’:
Constante, c’est-à-dire ?
Que dès que je pose mon bloc, il se met a tourner
Il te faudrait une variable soit dans la TileEntity soit dans le renderer que tu incrémenterai chaque rendu/tick et tu l’utilises comme angle.
-
J’ai éssayé avec un
public void updateTick(World world, int x, int y, int z, double d0, double d1, double d2) { tick = tick + 0.1; }Et dans ma partie renderTileEntityAt :
GL11.glRotatef((float) tick, 0, 0, 1);Mais sa ne marche pas…
-
@‘Sugarshy’:
J’ai éssayé avec un
public void updateTick(World world, int x, int y, int z, double d0, double d1, double d2) { tick = tick + 0.1; }Et dans ma partie renderTileEntityAt :
GL11.glRotatef((float) tick, 0, 0, 1);Mais sa ne marche pas…
“tick” est pour tous tes blocs dans ce cas, donc ça ne va pas.
Utilise une TileEntity, ce sera mieux. -
C’est a dire ?
-
-

Salut tout le monde
Depuis peu je me remets à GLUtils spécialement pour les animations mais je rencontre un problème, j’ai décomposé mon block en 3 .obj mais lorsque j’applique la texture (via du code dans ma class du specialRenderer cela ne marche pas : aucune texture). Certes je pourrai passer par des .mtl j’ai essayé ils fonctionnent très bien, cependant je souhaite passer par du code, car je trouve cela plus souple si dans le futur, par exemple : je crée un mob qui quand il lance une boule de feu sa texture change si on passe par un .mtl cela risque d’être beaucoup plus compliqué que par une simple ligne de code.Voici mes classes :
Merci d’avanceMa class tesr :
package mrplaigon.psccraft.minesagasmod.client; import mrplaigon.psccraft.minesagasmod.common.TileEntityBlockHayner; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.jglrxavpok.glutils.TessellatorModel; import org.lwjgl.opengl.GL11; public class TileEntityHaynerSpecialRenderer extends TileEntitySpecialRenderer implements IInventoryRenderer { private static TessellatorModel glmodel0;//tête private static final ResourceLocation textureLocation0 = new ResourceLocation( "/assets/minesagasmod/obj/hayner0.png"); private static TessellatorModel glmodel1;//cheveux private static final ResourceLocation textureLocation1 = new ResourceLocation( "/assets/minesagasmod/obj/hayner0.png"); private static TessellatorModel glmodel2;//corps private static final ResourceLocation textureLocation2 = new ResourceLocation( "/assets/minesagasmod/obj/hayner1.png"); public TileEntityHaynerSpecialRenderer() { this.glmodel0 = new TessellatorModel("/assets/minesagasmod/obj/hayner0.obj"); this.glmodel0.regenerateNormals(); this.glmodel1 = new TessellatorModel("/assets/minesagasmod/obj/hayner1.obj"); this.glmodel1.regenerateNormals(); this.glmodel2 = new TessellatorModel("/assets/minesagasmod/obj/hayner2.obj"); this.glmodel2.regenerateNormals(); } public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float scale) { //renderTileEntityTestAt((TileEntityBlockHayner)tileentity, x, y, z, scale); GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y , z + 0.5D); //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0); this.bindTexture(textureLocation0); GL11.glScaled(0.011D, 0.0071D, 0.01D); this.glmodel0.render(); GL11.glPopMatrix(); //GL11.glShadeModel(7425); GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y , z + 0.5D); this.bindTexture(textureLocation1); //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0); GL11.glScaled(0.011D, 0.0071D, 0.01D); this.glmodel1.render(); GL11.glPopMatrix(); // GL11.glShadeModel(7425); GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y , z + 0.5D); this.bindTexture(textureLocation2); //GL11.glRotatef((float) TileEntityBlockHayner.valeurRotation, 0, -1, 0); GL11.glScaled(0.011D, 0.0071D, 0.01D); this.glmodel2.render(); GL11.glPopMatrix(); //GL11.glShadeModel(7425); } public void renderInventory(double x, double y, double z) { } }et mon tile entity :
package mrplaigon.psccraft.minesagasmod.common; import java.util.Iterator; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; public class TileEntityBlockHayner extends TileEntity { public static int valeurRotation = 0; public void updateEntity() { valeurRotation++; System.out.println("La valeur est de " + valeurRotation); if (valeurRotation >= 360) valeurRotation = 0; } }Pour ce qui aurait des doutes sur l’emplacement de mes fichiers .obj et .png voici une image du chemin :
EDIT = Apparement l’image ne marche pas, voici tout de même un lien qui vous sauve :
-
UPPP plz aidez moi ça presse !
-
Salut ou re pour certains, j’ai (encore …) un problème et cette fois j’ai réalisé une vidéo pour que cela soit plus explicite pour votre cerveau et pour vos yeux. J’ai ce problème là depuis quelque temps mais c’est seulement maintenant que je viens à vous, nan en fait j’ai 2 problème :
-Mon mob marche se balade, me poursuit quand je suis en survival enfin bref, réagit tout comme il faudrait si il a une hitbox minimum (11), cependant quand je viens à changer sa hitbox (10
il ne bouge plus du tout : est totalement invisible. Je peux le faire bouger si je le collide, évidemment. Mais il ne bouge plus de lui même. Tout ça à cause de la hitbox, j’en suis sûr.Mon deuxième problème est un problème d’affichage vous le verrez dans la vidéo quand je me déplace ou que je bouge la tête mon mob est parfois invisible, le model 3d disparaît subitement ><
J’ai essayé de réduire son rendu (via la méthode translated) mais rien à faire c’est pire et je ne veux pas non plus que mon mob soit gigantesquement géant. Surtout que ça ne réglerait peut être pas totalement le problème m’enfin bon je vous remercie d’avance car je suis sûr que l’un d’entre vous aura une brillante solution
Le lien de la vidéo :
Youtube VideoIl y a une erreur dans la vidéo, le mob ne bouge plus si sa hitbox fait du 10*8, désolé