Résolu Load .obj
-
Bonjours à tous
Edit: J’ai envoyer le post à partir d’ici sans faire exprès
Je suis en train de tester d’importer des waveFronts .obj dans mon projet (enfin du moins, j’essaye ! )
Alors j’ai trouvé ce mod: http://www.minecraftforum.net/topic/1359846-147-3d-loader-minecraft-api/
Mais j’ai quelque problème:
1 - J’aime pas utiliser les mods dont je ne suis pas l’auteur
2 - Il charge les objets, mais n’applique pas les texture dans le fichier .mtl (sauf si on entre le chemin absolut du fichier, ce qui n’est réellement pas pratique :()
3 - Il n’est pas à jour
4 - Pratiquement aucune doc (et en anglais)Alors j’ai tester le waveFront loader de forge IModelCustom qui est quand même assez compliquer, mais voila le problème, il ne lit en aucun cas les ficher .mlt, il faut appliquer les textures à la main, beaucoup trop compliqué
Quelqun à un autre moyen ?
Merci de votre aide
Mugiwaxar
-
Alors pour ceux que ça intéresse, j’ai un petit peut avancer:
-
j’aime bien le “un petit peu”, sinon on pourrais voir les codes? ça pourrais faire un tuto.
-
En fait c’est pas trop au point pour le moment, j’ai juste doublé l’image et fait un translate gl11
Voici ma classe sword3D:
package com.yvelis.m3dmodels.common; import org.lwjgl.opengl.GL11; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; public class Sword3D implements IItemRenderer { private IModelCustom model3D = AdvancedModelLoader.loadModel("/assets/m3dmodels/models/weapon/weapon.obj"); private ResourceLocation texture = new ResourceLocation("m3dmodels:models/weapon/image.png"); @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object… data) { if(type.equals(ItemRenderType.EQUIPPED)) { GL11.glPushMatrix(); GL11.glScalef(2.0F, 2.0F, 2.0F); GL11.glRotatef(-60.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(17.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.20F, -0.035F, 0.25F); Minecraft.getMinecraft().renderEngine.bindTexture(texture); model3D.renderAll(); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glScalef(2.0F, 2.0F, 2.0F); GL11.glRotatef(-60.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(17.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.95F, -0.035F, 0.25F); model3D.renderAll(); GL11.glPopMatrix(); } else if (type.equals(ItemRenderType.EQUIPPED_FIRST_PERSON) ) { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(texture); GL11.glTranslatef(2.0F, -0.5f, 2.0f); GL11.glScalef(5.0F, 5.0F, 5.0F); GL11.glRotatef(70.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); model3D.renderAll(); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslatef(2.0F, -0.5f, -3.4f); GL11.glScalef(5.0F, 5.0F, 5.0F); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); model3D.renderAll(); GL11.glPopMatrix(); } else if (type.equals(ItemRenderType.ENTITY) ) { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(texture); GL11.glScalef(0.6F, 0.6F, 0.6F); GL11.glTranslated(0.0, 0.17, 0.0); GL11.glRotated(90, 0, 1, 0); GL11.glRotated(-90, 1, 0, 0); model3D.renderAll(); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glScalef(0.6F, 0.6F, 0.6F); GL11.glTranslated(-0.2, 0.2, 0.08); GL11.glRotated(90, 0, 1, 0); GL11.glRotated(-45, 1, 0, 0); model3D.renderAll(); GL11.glPopMatrix(); } else { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(texture); GL11.glScalef(8.8F, 8.8F, 8.8F); GL11.glTranslated(1.3, 0.9, 0); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotated(220, 1, 0, 0); model3D.renderAll(); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glScalef(8.8F, 8.8F, 8.8F); GL11.glTranslated(1.25, 0.5, 0); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotated(220, 1, 0, 0); model3D.renderAll(); GL11.glPopMatrix(); } } }
-
Ah, ok ça ne change pas temps que ça des rendu des modèles vanilla.
Merci. -
Oui c’est rien de trop compliqué en fait,
je vais tenter d’autre truc et jvous tiens au courantPs: Merci pour le +1 ^^
Edit: Sa vaut la peine de faire des tutos pour la 1.6.x ? Vu que ma 1.7.x est en cours …
Si c’est le cas, jveux bien en faire quelque un -
Tu peux toujours faire des tutoriels 1.6 malgré le fait que la 1.7 est disponible, d’ailleurs le code ne devrait pas être très différent en 1.7, les rendus n’ont pas trop bougé (il y a juste le modèle qui se charge avec un ResourceLocation maintenant, je ne crois pas qu’il y est d’autres changement).
-
Alors ce qui serais vraiment super nickel, se serai de mètre ce qui a changer par rapport à la 1.6 dans les tutos de la 1.7
-
C’est prévu, je vais faire un tutoriel update dès que les premiers tutoriels de base seront refait.
-
Mais c’est génial !
Si jamais ya besoin d’aide pour les tutoriels, je suis partant aussi
-
Sinon quelqu’un à une solution pour mon post initial ?
-
comment appliqué le rendu sword3D a son arme?
-
Je suis assez doué en modèles .obj ( cf. mon mod ratchet and clank, qui utilise des items en OBJ, un block en OBJ, et une armure en OBJ. )
Je comprend pas trop le problème que tu as, tu as réussi non ?
-
comment on fait pour appliqué le rendu (j’ai jamais fais)
-
@‘isador34’:
comment on fait pour appliqué le rendu (j’ai jamais fais)
Appliquer un rendu a quoi ?
On peux appliquer un rendu a tout et n’importe quoi. ( Du plus gros des blocks au plus petit des pixels d’un GUI )
-
@‘Gugu42’:
Je suis assez doué en modèles .obj ( cf. mon mod ratchet and clank, qui utilise des items en OBJ, un block en OBJ, et une armure en OBJ. )
Je comprend pas trop le problème que tu as, tu as réussi non ?
Oui et non,
forge permet d’appliquer UN fichier texture à un wavefront(du moins, c’est se que j’ai cru comprendre), dans ce cas, comment je fait si je veut en appliquer plusieurs, et donc utiliser un fichier MTL -
@‘Mugiwaxar’:
@‘Gugu42’:
Je suis assez doué en modèles .obj ( cf. mon mod ratchet and clank, qui utilise des items en OBJ, un block en OBJ, et une armure en OBJ. )
Je comprend pas trop le problème que tu as, tu as réussi non ?
Oui et non,
forge permet d’appliquer UN fichier texture à un wavefront(du moins, c’est se que j’ai cru comprendre), dans ce cas, comment je fait si je veut en appliquer plusieurs, et donc utiliser un fichier MTLAh, ça je l’ai fait de la manière la plus sale possible : J’ai coupé mon modèle en plusieurs parties.
Plus exactement, j’ai découper mon modèle en 5 pour les 5 fichiers texture que j’ai.
Exemple ici : https://github.com/Gugu42/RatchetAndClankMod/blob/master/com/gugu42/rcmod/render/TileEntityVendorSpecialRenderer.java
( C’est très “sale” mais ça marche. J’utilise plusieurs matrices OpenGL mais c’est faisable dans une seule )
-
@‘isador34’:
comment on fait pour appliqué le rendu (j’ai jamais fais)
Pour ma part, j’ai du ecrire:
MinecraftForgeClient.registerItemRenderer(Mmain.sword1.itemID, new Sword3D() );
Dans le clientProxy___
@‘Gugu42’:@‘Mugiwaxar’:
@‘Gugu42’:
Je suis assez doué en modèles .obj ( cf. mon mod ratchet and clank, qui utilise des items en OBJ, un block en OBJ, et une armure en OBJ. )
Je comprend pas trop le problème que tu as, tu as réussi non ?
Oui et non,
forge permet d’appliquer UN fichier texture à un wavefront(du moins, c’est se que j’ai cru comprendre), dans ce cas, comment je fait si je veut en appliquer plusieurs, et donc utiliser un fichier MTLAh, ça je l’ai fait de la manière la plus sale possible : J’ai coupé mon modèle en plusieurs parties.
Plus exactement, j’ai découper mon modèle en 5 pour les 5 fichiers texture que j’ai.
Exemple ici : https://github.com/Gugu42/RatchetAndClankMod/blob/master/com/gugu42/rcmod/render/TileEntityVendorSpecialRenderer.java
( C’est très “sale” mais ça marche. J’utilise plusieurs matrices OpenGL mais c’est faisable dans une seule )
Je vois
Effectivement, c’est pas jolie jolie, dommage que forge ne gère pas les .mtl
C’est vraiment la seul solution ?
Pars-ce que moi qui veut insérer des dizaines d’objets qui on chacun 5-6 images textures, c’est pas gagné -
public void registerRenderers(){ //Ici les futurs registrys MinecraftForgeClient.registerItemRenderer(Mineralherb.Item.sword1.itemID, new Sword3D() ); }
comme ca?___
public void registerRenderers(){ //Ici les futurs registrys MinecraftForgeClient.registerItemRenderer(Mineralherb.Item.sword1.itemID, new Sword3D() ); }
comme ca?
-
Voila la fonction d’origine:
public static void registerItemRenderer(int itemID, IItemRenderer renderer)
Elle permet d’assigner un renderer que tu as précédemment créée à un item