java3D 箭头


public class Pos extends Applet {

private static final long serialVersionUID = 1L;

float knot[] = { 0.0f, 1.0f };
Color3f color = new Color3f(0.0f, 0.0f, 1.0f);
Color3f c[] = { color, color };

private BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
BoundingSphere bound = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 50.);

Color3f color = new Color3f(0f, 0f, 255f);

Point3f pos[] = {
new Point3f(-1f, 0.4f, 0.0f),
new Point3f(1f, 0.4f, 0.0f),
};
Point3f pos1[] = {
new Point3f(-1f, -0.4f, 0.0f),
new Point3f(1f, -0.4f, 0.0f),
};
Point3f pos2[] = {
new Point3f(-3f, 0.4f, 0.0f),
new Point3f(-1.f, 0.4f, 0.0f),
};
Point3f pos3[] = {
new Point3f(-3f, -0.4f, 0.0f),
new Point3f(-1.f, -0.4f, 0.0f),
};
Point3f pos4[] = {
new Point3f(1f, 0.4f, 0.0f),
new Point3f(3f, 0.4f, 0.0f),
};
Point3f pos5[] = {
new Point3f(1f, -0.4f, 0.0f),
new Point3f(3f, -0.4f, 0.0f),
};

draw(objRoot, bound, 0d, 0d, 170d, color, pos, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos1, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos2, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos3, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos4, 2000, 0);
draw(objRoot, bound, 0d, 0d, 170d, color, pos5, 2000, 0);


// draw(objRoot, bound1, Math.PI/3, Math.PI/3, Math.PI/3, color, 1.f, 3.f, rotate, rotate2, 2000, 0);

Color3f bgColor = new Color3f(1.0f, 1.0f, 1.0f);
Background bg = new Background(bgColor);
bg.setApplicationBounds(bound);

objRoot.addChild(bg);

return objRoot;
}

public Pos() {
setLayout(new BorderLayout());
Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
add("Center", c);
Viewer viewer = new Viewer(c);
Vector3d viewpoint = new Vector3d(0.0, 0.0, 10.0);

Transform3D t = new Transform3D();
t.set(viewpoint);
ViewingPlatform v = new ViewingPlatform();
v.getViewPlatformTransform().setTransform(t);

BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(v, viewer);
u.getViewingPlatform();
u.addBranchGraph(scene);
}

/**
*
* @param objRoot
* @param bound
* @param directX 箭头方向
* @param directY
* @param directZ
* @param color3f 箭头颜色
* @param pos 运动轨迹
* @param forward 正向时间
* @param reverse 逆向时间
*/

public void draw(BranchGroup objRoot, BoundingSphere bound, Double directX, Double directY, Double directZ,
Color3f color3f, Point3f pos[],
long forward, long reverse) {

Transform3D rotate = new Transform3D();
rotate.rotY(Math.toRadians(directY));
rotate.rotX(Math.toRadians(directX));
rotate.rotZ(Math.toRadians(directZ));
rotate.setScale(1.0f);
rotate.setTranslation(new Vector3f(0.0f, 0.0f, 0.0f));

//渲染外围动画路径
Transform3D tr = new Transform3D();
// tr.rotX(Math.PI/4);
// tr.rotZ(Math.PI/4);

tr.rotX((90+directX)*Math.PI/180);
tr.rotY((90+directY)*Math.PI/180);
tr.rotZ((90+directZ)*Math.PI/180);
tr.setTranslation(new Vector3f(10f, 5.f, 5.0f));

TransformGroup group = new TransformGroup(tr);
group.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

//渲染箭头
Appearance app = new Appearance();
Material material = new Material();
//颜色
material.setEmissiveColor(color3f);
app.setMaterial(material);

TransformGroup transformGroup = new TransformGroup();
transformGroup.setTransform(rotate);


TransformGroup transformGroup1 = new TransformGroup();
transformGroup1.addChild(new Cone(0.1f, 0.4f, 3, app));

Transform3D rotate2 = new Transform3D();
rotate2.setScale(1.0f);
rotate2.setTranslation(new Vector3f(0.0f, -0.2f, 0.0f));
TransformGroup transformGroup2 = new TransformGroup();
transformGroup2.setTransform(rotate2);
transformGroup2.addChild(new Cylinder(0.01f, 0.6f, 3, app));

transformGroup.addChild(transformGroup1);
transformGroup.addChild(transformGroup2);

group.addChild(transformGroup);
Alpha xtranAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE | Alpha.DECREASING_ENABLE, 100, 100, forward, 100, 200, reverse, 100, 0);
PositionPathInterpolator tran = new PositionPathInterpolator(xtranAlpha, group, tr, knot, pos);
tran.setSchedulingBounds(bound);

objRoot.addChild(group);
group.addChild(tran);
}


public static void main(String[] args) {
new MainFrame(new Pos(), 400, 400);
}
}



用锥形和圆柱体 组成的箭头。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值