-
September 29th, 2012, 02:22 AM
#1
Java 3D: Trouble with .mtl files
So I've been trying to play around with Java 3D and, recently, I've been playing around with importing outside 3D models into a program. At this point, I can get the model into the program as an OBJ file, but for whatever reason, the program won't load the corresponding material file.
This is the code I wrote:
Code:
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import com.sun.j3d.loaders.objectfile.*;
import com.sun.j3d.loaders.Scene;
import java.awt.Color;
import javax.vecmath.*;
import javax.swing.*;
import javax.imageio.IIOException;
public class ModelLoadingTest {
public static void main(String[] args) {
SimpleUniverse universe = new SimpleUniverse();
BranchGroup scene = new BranchGroup();
ObjectFile loader = new ObjectFile(ObjectFile.RESIZE);
Scene modelScene = null;
Shape3D model = new Shape3D();
try{
modelScene = loader.load("Pterodactyl.OBJ");
model = (Shape3D) modelScene.getSceneGroup().getChild(0);
modelScene.getSceneGroup().removeChild(0);
//JOptionPane.showMessageDialog(null, model.getAppearance().getMaterial());
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e.toString());
}
DirectionalLight lighting = new DirectionalLight(new Color3f(Color.WHITE), new Vector3f(0f, 0f, -1f));
lighting.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 1.0), 100));
//scene.addChild(modelScene.getSceneGroup());
scene.addChild(model);
scene.addChild(lighting);
universe.addBranchGraph(scene);
universe.getViewingPlatform().setNominalViewingTransform();
}
}
This is the beginning of the .obj file:
Code:
# 3ds Max Wavefront OBJ Exporter
#
mtllib Pterodactyl.mtl
#
# object Pterodactyl
#
v 121.2250 19.0041 66.8833
v 116.1940 12.5999 63.5611
v 135.5396 13.8324 64.7891
v 137.5667 21.8641 68.2204
v 121.5318 24.7219 64.6238
v 170.6878 5.0353 69.7959
And this is the corrosponding .mtl file:
Code:
# 3ds Max Wavefront OBJ Exporter
#
newmtl pterodactyl_MAT
Ns 10.0000
Ni 1.5000
d 1.0000
Tr 0.0000
Tf 1.0000 1.0000 1.0000
illum 2
Ka 0.5880 0.5880 0.5880
Kd 0.5880 0.5880 0.5880
Ks 0.0000 0.0000 0.0000
Ke 0.0000 0.0000 0.0000
map_Ka Pterodactyl_D.tga
map_Kd Pterodactyl_D.tga
Now, the code runs fine when the mtllib call in the .obj file is removed (save for the fact that the pterodactyl is white and has a material generated by default by the Java 3D library), but when the mtllib call is present and uncommented in the .obj file, the following error occurs when I run the program:
Code:
com.sun.j3d.utils.image.ImageException: javax.imageio.IIOException: Can't read input file!
Now, I'm not sure if I'm correct, but for this exception to occur in the first place, the program has to acknowledge that the .mtl file exists which begs the question of why it can't read it. Is it because the .mtl file is formatted wrong? Is it because the call in the .obj file is wrong or located in the wrong part of the file, or is it something to do with my coding?
Sidenote: Before anyone suggests it as a fix, Pterodactyl.obj and Pterodactyl.mtl ARE in the same folder.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|