📄 fleetscenenode.java
字号:
/*
* Created on 2005-10-11
* $Id: FleetSceneNode.java,v 1.15 2006/01/07 16:19:00 macx2k Exp $
*/
package net.sf.jawp.gui.client.j3d;
import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
import javax.media.j3d.Behavior;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Material;
import javax.media.j3d.Node;
import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.AxisAngle4f;
import javax.vecmath.Color3f;
import net.sf.jawp.api.domain.Fleet;
import net.sf.jawp.j3d.object.PlacementHelper;
import net.sf.jawp.j3d.object.ReusableSceneObject;
import com.sun.j3d.utils.geometry.Cone;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.geometry.Primitive;
/**
* @author maciek
* @version $Revision: 1.15 $
*
*/
public class FleetSceneNode extends ReusableSceneObject<Fleet>
{
private static final float BODY_LENGTH = 800f;
private static final float BODY_RADIUS = 160f;
private static final float CABIN_LENGTH = 300f;
private static final float ENGINE_LENGTH = 20f;
private static final float ENGINE_RADIUS = 120f;
private static final float TUNNEL_LENGTH = 1000f;
private static final float TUNNEL_RADIUS = 40f;
private static final float GRAVITATION_HABITATS_LENGTH = 350f;
private static final float GRAVITATION_HABITATS_RADIUS = 100f;
private static Behavior rotator = null;
private static TransformGroup rotationTransformGroup;
private Node bodyNode;
public FleetSceneNode()
{
super(false);
}
/**
* {@inheritDoc}
*/
@Override
protected void updatePosition(final Fleet fleet,
final Transform3D transform3d)
{
transform3d.setTranslation(J3DHelper.toJ3d(fleet.getPosition()));
}
/**
* {@inheritDoc}
*/
@Override
protected Node createScenegraphObject()
{
final BranchGroup group = new BranchGroup();
final Appearance bodyApp = createBodyAppearance();
final Appearance engineApp = createEngineAppearance();
// set shape
final BranchGroup body = new BranchGroup();
bodyNode = new Cylinder(BODY_RADIUS, BODY_LENGTH,
Primitive.GENERATE_NORMALS, bodyApp);
body.addChild(bodyNode);
final Node engine = new Cylinder(ENGINE_RADIUS, ENGINE_LENGTH,
Primitive.GENERATE_NORMALS, engineApp);
body.addChild(PlacementHelper.placeY(engine,
-(BODY_LENGTH / 2 + ENGINE_LENGTH / 20)));
final Node cabin = new Cone(BODY_RADIUS, CABIN_LENGTH,
Primitive.GENERATE_NORMALS, bodyApp);
body.addChild(PlacementHelper.placeY(cabin, BODY_LENGTH / 2
+ CABIN_LENGTH / 2));
final Node tunnel = new Cylinder(TUNNEL_RADIUS, TUNNEL_LENGTH,
Primitive.GENERATE_NORMALS, bodyApp);
body.addChild(PlacementHelper.rotate(tunnel, new AxisAngle4f(
1.0f, 0.0f, 0.0f, (float) Math.PI / 2f)));
final Node habitatA = new Cylinder(GRAVITATION_HABITATS_RADIUS,
GRAVITATION_HABITATS_LENGTH, Primitive.GENERATE_NORMALS,
bodyApp);
body.addChild(PlacementHelper.placeZ(PlacementHelper
.rotate(habitatA, new AxisAngle4f(0f, 0f, 1f,
(float) Math.PI / 2f)), TUNNEL_LENGTH / 2));
final Node habitatB = new Cylinder(GRAVITATION_HABITATS_RADIUS,
GRAVITATION_HABITATS_LENGTH, Primitive.GENERATE_NORMALS,
bodyApp);
body.addChild(PlacementHelper.placeZ(PlacementHelper
.rotate(habitatB, new AxisAngle4f(0f, 0f, 1f,
(float) Math.PI / 2f)), -TUNNEL_LENGTH / 2));
// set rotation
final Alpha alpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 5000,
0, 0, 0, 0, 0);
final Transform3D transform = new Transform3D();
transform.rotY(Math.PI / 2.0f);
rotationTransformGroup = new TransformGroup();
rotationTransformGroup
.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
rotationTransformGroup
.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
rotationTransformGroup.addChild(body);
group.addChild(rotationTransformGroup);
rotator = new RotationInterpolator(alpha, rotationTransformGroup,
transform, 0f, (float) Math.PI * 2f);
rotator.setSchedulingBounds(Scene.getBoundingSphere());
group.addChild(rotator);
return group;
}
/**
* {@inheritDoc}
*/
@Override
protected void setUserData(final Fleet renderedObject)
{
bodyNode.setUserData(renderedObject);
}
private Appearance createBodyAppearance()
{
final Appearance app = new Appearance();
final Color3f objColor = new Color3f(0.3f, 0.3f, 0.3f);
final Material material = new Material();
material.setShininess(10f);
material.setAmbientColor(objColor);
material.setDiffuseColor(objColor);
app.setMaterial(material);
return app;
}
private Appearance createEngineAppearance()
{
final Appearance app = new Appearance();
final Color3f objColor = new Color3f(0.9f, 0.9f, 1f);
final Material material = new Material();
material.setShininess(10f);
// material.setAmbientColor(objColor);
// material.setDiffuseColor(objColor);
material.setEmissiveColor(objColor);
app.setMaterial(material);
return app;
}
/**
* {@inheritDoc}
*/
@Override
protected void updateDirection1(final Fleet renderedObject, final Transform3D rotateXZ)
{
// TODO Auto-generated method stub
}
/**
* {@inheritDoc}
*/
@Override
protected void updateDirection2(final Fleet renderedObject, final Transform3D rotate)
{
// TODO Auto-generated method stub
}
/**
* {@inheritDoc}
*/
@Override
protected void updateDirection3(final Fleet renderedObject, final Transform3D rotateXZ)
{
// TODO Auto-generated method stub
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -