Login  Register

how to load a .obj with mtl?

Posted by Ususuus on Aug 06, 2017; 3:59am
URL: https://forum.jogamp.org/how-to-load-a-obj-with-mtl-tp4038099.html

I'm struggling this for 3 days, i can load .obj files, but the materials never works, can anyone give some tips?

package com.java3d.dennist.loader;

import javax.media.j3d.BranchGroup;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
public class ObjFileReader extends BranchGroup{
    private double creaseAngle = 60.0;
    public ObjFileReader(String filePath){
        BranchGroup branchGroup = new BranchGroup();
        int flags = ObjectFile.RESIZE;
        ObjectFile objFile = new ObjectFile(flags, (float)(creaseAngle*Math.PI)/180);
        Scene scenen = null;
        try {
            scenen = objFile.load(filePath);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("OBJ load Err:" + e.getMessage());
        }
        branchGroup.addChild(scenen.getSceneGroup());
        this.addChild(branchGroup);
    }
}

package com.java3d.dennist.loader;

import java.applet.Applet;
import java.awt.BorderLayout;

import javax.media.j3d.Alpha;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class JavaModelObjLoaderApp extends Applet{
    private static final long serialVersionUID = 5841679659336190804L;
    public BranchGroup createSceneGraph(){
        BranchGroup group = new BranchGroup();
        TransformGroup transGroup = new TransformGroup();
        Transform3D trans3d = new Transform3D();
        trans3d.setScale(0.8);
        transGroup.setTransform(trans3d);
        group.addChild(transGroup);
       
        BoundingSphere bound= new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
        Color3f bgColor = new Color3f(0.05f,0.05f,0.2f);
        Background bg = new Background(bgColor);
        bg.setApplicationBounds(bound);
        group.addChild(bg);
        Color3f lightColor = new Color3f(1.0f,1.0f,0.9f);
        Vector3f lightDirection = new Vector3f(4.0f,-7.0f,-12.0f);
        DirectionalLight light = new DirectionalLight(lightColor, lightDirection);
        light.setInfluencingBounds(bound);
        group.addChild(light);  
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

        objTrans.addChild(new ObjFileReader("F:/guanyu.obj"));

        transGroup.addChild(objTrans);

        group.compile();
       
        return group;
    }
   
   
    public JavaModelObjLoaderApp(){
       
        setLayout(new BorderLayout());
        Canvas3D canvas = new Canvas3D(null);
        add("Center",canvas);
        BranchGroup scene = createSceneGraph();
       
        SimpleUniverse universe = new SimpleUniverse(canvas);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
    }
   
   
    public static void main(String[] args) {
        new MainFrame(new JavaModelObjLoaderApp(), 360,360);
    }
}