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 courant

    Ps: 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


  • Administrateurs

    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


  • Administrateurs

    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 MTL

    Ah, ç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 MTL

    Ah, ç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


Log in to reply