package test;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseWheelZoom;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.Cone;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.Alpha;
import javax.media.j3d.AmbientLight;
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.LineArray;
import javax.media.j3d.LineAttributes;
import javax.media.j3d.Material;
import javax.media.j3d.PolygonAttributes;
import javax.media.j3d.PositionInterpolator;
import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
/**
*
* @author Administrator
*/
public class mytest extends Applet {
public mytest() {
this.setLayout(new BorderLayout());
GraphicsConfiguration configuration =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(configuration);
this.add(canvas3D);
SimpleUniverse universe = new SimpleUniverse(canvas3D);
universe.addBranchGraph(getBranchGroup());
}
BranchGroup getBranchGroup() {
BranchGroup branchGroup = new BranchGroup();
BoundingSphere bounds =
new BoundingSphere(new Point3d(0, 2.0, 7.0), 1000.0);
//set coordinates
Transform3D transform3D = new Transform3D();
transform3D.setTranslation(new Vector3d(0, 0, -7));
TransformGroup transformGroup = new TransformGroup();
transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transformGroup.setTransform(transform3D);
//set back color
Color3f backgroudColor3f = new Color3f(Color.GRAY);
Background background = new Background(backgroudColor3f);
background.setApplicationBounds(bounds);
branchGroup.addChild(background);
//set mouse's behavior
MouseRotate mouseRotate = new MouseRotate();
mouseRotate.setTransformGroup(transformGroup);
mouseRotate.setSchedulingBounds(bounds);
transformGroup.addChild(mouseRotate);
MouseWheelZoom mouseZoom = new MouseWheelZoom();
mouseZoom.setTransformGroup(transformGroup);
mouseZoom.setSchedulingBounds(bounds);
transformGroup.addChild(mouseZoom);
MouseTranslate mouseTranslate = new MouseTranslate();
mouseTranslate.setTransformGroup(transformGroup);
mouseTranslate.setSchedulingBounds(bounds);
transformGroup.addChild(mouseTranslate);
//throw in some light so we aren't stumbling
//around in the dark
Color3f lightColor = new Color3f(Color.green);
AmbientLight ambientLight = new AmbientLight(lightColor);
ambientLight.setInfluencingBounds(bounds);
branchGroup.addChild(ambientLight);
DirectionalLight directionalLight = new DirectionalLight();
directionalLight.setColor(lightColor);
directionalLight.setInfluencingBounds(bounds);
branchGroup.addChild(directionalLight);
//add new cube
TransformGroup cubeGroup = new TransformGroup();
cubeGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Transform3D cubeTransform3D = new Transform3D();
cubeTransform3D.setTranslation(new Vector3d(-2, 2, 2));
cubeGroup.setTransform(cubeTransform3D);
ColorCube cube = new ColorCube(0.5f);
Alpha cubeapAlpha=new Alpha(-1, Alpha.INCREASING_ENABLE |
Alpha.DECREASING_ENABLE,
0, 0,
5000, 5000, 200,
5000, 5000, 200);
PositionInterpolator cubePositionInterpolator=
new PositionInterpolator(cubeapAlpha, cubeGroup,cubeTransform3D , 0 ,(float) Math.PI );
cubePositionInterpolator.setSchedulingBounds(bounds);
cubeGroup.addChild(cubePositionInterpolator);
cubeGroup.addChild(cube);
transformGroup.addChild(cubeGroup);
//add box
TransformGroup boxGroup=new TransformGroup();
boxGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Transform3D boxTransform3D=new Transform3D();
boxTransform3D.setTranslation(new Vector3d(-2, -2, 2));
boxGroup.setTransform(boxTransform3D);
Box box=new Box( 0.5f, 0.5f , 0.5f , null);
boxGroup.addChild(box);
Alpha boxAlpha=new Alpha(-1, Alpha.INCREASING_ENABLE |
Alpha.DECREASING_ENABLE,
0, 0,
5000, 5000, 200,
5000, 5000, 200);
RotationInterpolator boxInterpolator=
new RotationInterpolator(boxAlpha, boxGroup, boxTransform3D, 0 , (float)Math.PI );
boxInterpolator.setSchedulingBounds(bounds);
boxGroup.addChild( boxInterpolator);
transformGroup.addChild(boxGroup);
//add sphere
TransformGroup sphereGroup =new TransformGroup();
Transform3D sphereTransform3D=new Transform3D();
sphereTransform3D.setTranslation(new Vector3d(2,-2,2));
sphereGroup.setTransform(sphereTransform3D);
Sphere sphere=new Sphere(0.5f, -1, 80);
sphereGroup.addChild(sphere);
transformGroup.addChild(sphereGroup);
//add linesphere
TransformGroup linesphereGroup=new TransformGroup();
Transform3D linesphereTransform3D=new Transform3D();
linesphereTransform3D.setTranslation( new Vector3d(-2, 2, -2));
linesphereGroup.setTransform(linesphereTransform3D);
Sphere lineSphere=new Sphere(0.8f);
Appearance linesphereAppearance=new Appearance();
Material linesphereMaterial=new Material();
linesphereMaterial.setDiffuseColor(new Color3f(Color.PINK));
linesphereAppearance.setMaterial(linesphereMaterial);
LineAttributes linesphereLineAttributes=new LineAttributes();
linesphereLineAttributes.setLineWidth(0.001f);
linesphereAppearance.setLineAttributes(linesphereLineAttributes);
PolygonAttributes linespherepPolygonAttributes=new PolygonAttributes();
linespherepPolygonAttributes.setPolygonMode(PolygonAttributes.CULL_BACK);
linesphereAppearance.setPolygonAttributes(linespherepPolygonAttributes);
lineSphere.setAppearance(linesphereAppearance);
linesphereGroup.addChild(lineSphere);
transformGroup.addChild(linesphereGroup);
//add cone
TransformGroup coneGroup=new TransformGroup();
Transform3D coneTransform3D=new Transform3D();
coneTransform3D.setTranslation(new Vector3d(2,2,-2));
coneGroup.setTransform(coneTransform3D);
Cone cone=new Cone(0.5f,0.5f);
coneGroup.addChild(cone);
transformGroup.addChild(coneGroup);
// add linecone
TransformGroup lineconeGroup=new TransformGroup();
Transform3D lineconeTransform3D=new Transform3D();
lineconeTransform3D.setTranslation(new Vector3d(-2,-2,-2));
lineconeGroup.setTransform(lineconeTransform3D);
Cone lineCone=new Cone(0.5f, 1.5f);
Appearance lineconeAppearance=new Appearance();
PolygonAttributes lineconepolygonAttributes=new PolygonAttributes();
lineconepolygonAttributes.setPolygonMode(PolygonAttributes.CULL_BACK);
lineconeAppearance.setPolygonAttributes(lineconepolygonAttributes);
lineCone.setAppearance(lineconeAppearance);
lineconeGroup.addChild(lineCone);
transformGroup.addChild(lineconeGroup);
//add cylinder
TransformGroup cylinderGroup=new TransformGroup();
Transform3D cylinderTransform3D=new Transform3D();
cylinderTransform3D.setTranslation(new Vector3d(2,-2,-2));
cylinderGroup.setTransform(cylinderTransform3D);
Cylinder cylinder=new Cylinder(0.5f ,1.0f);
cylinderGroup.addChild(cylinder);
transformGroup.addChild(cylinderGroup);
//add coordinates
float[] linevertX = {
-5.0f, 0f, 0f, 5.0f, 0f, 0f,};
float[] linevertY = {
0 , -5.0f, 0f, 0, 5.0f, 0f,};
float[] linevertZ = {
0 , 0, -5.0f, 0, 0,5.0f,};
float[] linecolorsX = {
5.0f, 0f, 0f, 5.0f, 0.0f, 0f,};
float[] linecolorsY = {
0f, 5.0f, 0f, 0f, 5.0f, 0f,};
float[] linecolorsZ = {
0f, 0f, 5.0f, 0f, 0.0f, 5.0f,};
LineArray lineX = new LineArray(2, LineArray.COORDINATES | LineArray.COLOR_3);
lineX.setCoordinates(0, linevertX);
lineX.setColors(0, linecolorsX);
LineArray lineY = new LineArray(2, LineArray.COORDINATES | LineArray.COLOR_3);
lineY.setCoordinates(0, linevertY);
lineY.setColors(0, linecolorsY);
LineArray lineZ = new LineArray(2, LineArray.COORDINATES | LineArray.COLOR_3);
lineZ.setCoordinates(0, linevertZ);
lineZ.setColors(0, linecolorsZ);
LineAttributes lineAttributes = new LineAttributes();
lineAttributes.setLineWidth(3.0f);
Appearance lineappearance = new Appearance();
lineappearance.setLineAttributes(lineAttributes);
TransformGroup lineGroupX = new TransformGroup();
lineGroupX.setTransform(new Transform3D());
Shape3D lineShape3DX = new Shape3D();
lineShape3DX.setGeometry(lineX);
lineShape3DX.setAppearance(lineappearance);
lineGroupX.addChild(lineShape3DX);
transformGroup.addChild(lineGroupX);
TransformGroup lineGroupY= new TransformGroup();
lineGroupY.setTransform(new Transform3D());
Shape3D lineShape3DY = new Shape3D();
lineShape3DY.setGeometry(lineY);
lineShape3DY.setAppearance(lineappearance);
lineGroupX.addChild(lineShape3DY);
transformGroup.addChild(lineGroupY);
TransformGroup lineGroupZ= new TransformGroup();
lineGroupZ.setTransform(new Transform3D());
Shape3D lineShape3DZ = new Shape3D();
lineShape3DZ.setGeometry(lineZ);
lineShape3DZ.setAppearance(lineappearance);
lineGroupX.addChild(lineShape3DZ);
transformGroup.addChild(lineGroupZ);
branchGroup.addChild(transformGroup);
return branchGroup;
}
public static void main(String[] argsSes) {
new MainFrame(new mytest(), 256, 256);
}
}
运行效果截图:
代码来自:http://wenku.baidu.com/view/e7f8f1e85ef7ba0d4a733b77.html