Here is a chair i created using blender:
Now, when i display it using Java3D this is what i get:
Why is my texture not showing up in java? Here is my code for displaying the chair:
package com;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
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.microcrowd.loader.java3d.max3ds.Loader3DS;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class LoadAnObject extends Applet
{
public LoadAnObject()
{
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
add("Center", canvas);
BranchGroup content = getScene();
content.compile();
SimpleUniverse universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(content);
}
public BranchGroup getScene()
{
BranchGroup group = new BranchGroup();
Loader3DS loader = new Loader3DS();
Scene scene = null;
try
{
scene = loader.load("/Users/John/ArtOfIllusion/Chair.3ds");
}catch(Exception e){e.printStackTrace();}
TransformGroup rotateGroup = new TransformGroup();
Transform3D rotate = new Transform3D();
rotate.rotX(- Math.PI / 8);
rotateGroup.setTransform(rotate);
rotateGroup.addChild(scene.getSceneGroup());
TransformGroup objSpin = new TransformGroup();
objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//objSpin.addChild(new ColorCube(.5));
Alpha rotationAlpha = new Alpha(-1, 4000);
RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objSpin);
BoundingSphere boundSphere = new BoundingSphere(new Point3d(0.0f, 0.0f, 0.0f), 200);
rotator.setSchedulingBounds(boundSphere);
objSpin.addChild(rotator);
objSpin.addChild(rotateGroup);
TransformGroup moveGroup = new TransformGroup();
Transform3D move = new Transform3D();
move.setTranslation(new Vector3f(0.0f, 0.0f, -20.0f));
moveGroup.setTransform(move);
moveGroup.addChild(objSpin);
group.addChild(moveGroup);
Background background = new Background(0.0f, 1.0f, 1.0f);
background.setApplicationBounds(new BoundingSphere());
group.addChild(background);
Color3f light1Color = new Color3f(1.0f, 1.0f, 1.0f);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
Vector3f light1Direction = new Vector3f(0, 0, 10);
DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
group.addChild(light1);
return group;
}
public static void main(String args[])
{
Frame frame = new MainFrame(new LoadAnObject(), 256, 256);
}
}
The file format I'm using is .3ds, here is where i got the loader from:
How do i get the texture of the chair to show up in java?
edit:
I compiled my chair into a .3ds file instead of an object file, i now have to use a .3ds loader which i got from here:
The code doesn't change too much, instead of using an ObjectFile i now use a Loader3DS
So now obviously you can see that the material transferred over, but not the texture, how do i get the texture to show up?
Java apparently doesn't load textures unless they are generated from an image. The only way I've been able to load textures is from an image mapped texture. I've tried a couple different formats and i still got nothing. If you are going to try to use textures in Java3D make sure you use Image Mapped textures!!