java3D一个场景内创建两个以上的图形

package test;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;

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.Material;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

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.behaviors.mouse.MouseZoom;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class Drag extends Applet {
 private SimpleUniverse universe;

 public Drag() {
 }

 public void init() {
  //创建画布
  Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
  setLayout(new BorderLayout());
  add("Center", canvas);
  //设置场景对象
  BranchGroup scene = createScene();
  //创建虚拟宇宙根据画布
  SimpleUniverse u = new SimpleUniverse(canvas);
  //设置观察者位置
  u.getViewingPlatform().setNominalViewingTransform();
  //添加之前创建的场景
  u.addBranchGraph(scene);
 }

 public BranchGroup createScene() {
  //创建分支组合,可看作是创建场景
  BranchGroup scene = new BranchGroup();
  //创建空间范围
  BoundingSphere bounds = new BoundingSphere(new Point3d(), Double.MAX_VALUE);
  //设置背景
  Color3f bgColor = new Color3f(0.0f,0.0f,0.0f);//黑色或Color.black
  Background bg =new Background(bgColor);
  bg.setApplicationBounds(bounds);
  scene.addChild(bg);
  //光照
  Color3f lightColor = new Color3f(Color.gray);
  Vector3f lightDirection = new Vector3f(0f, 0f, -10f);
  DirectionalLight light = new DirectionalLight(lightColor, lightDirection);
  light.setInfluencingBounds(bounds);
  scene.addChild(light);
  //创建变换组合对象
  TransformGroup transformGroup = null;
  Transform3D obj3D = new Transform3D();
  obj3D.setTranslation(new Vector3f(-0.6f, 0.0f, -0.6f));//设置位置
  transformGroup= new TransformGroup(obj3D); 
  transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
  transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  // 设置对象呈现方式
  Appearance app = new Appearance();
  Material material = new Material();
  material.setEmissiveColor(new Color3f(Color.blue));
  app.setMaterial(material);  
  // 添加立方体根据上面的呈现方式//  
  transformGroup.addChild(new Box(0.2f, 0.2f, 0.2f, app));
  // 创建鼠标旋转(左键)
  MouseRotate mr = new MouseRotate();  
  mr.setTransformGroup(transformGroup);
  transformGroup.addChild(mr);
  mr.setSchedulingBounds(bounds);
  // 创建鼠标滚轮绽放
  MouseWheelZoom mwz = new MouseWheelZoom();
  mwz.setTransformGroup(transformGroup);
  transformGroup.addChild(mwz);
  mwz.setSchedulingBounds(bounds);
  // 创建鼠标平移(右键)
  MouseTranslate mt = new MouseTranslate();
  mt.setTransformGroup(transformGroup);
  transformGroup.addChild(mt);
  mt.setSchedulingBounds(bounds);
  // 添加到场景中
  scene.addChild(transformGroup);
  // 在另一个位置添加圆柱体
  obj3D.setTranslation(new Vector3f(0.6f, 0.0f, -0.6f));
  transformGroup= new TransformGroup(obj3D); 
  transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
  transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  // 添加圆柱体依然根据之前的呈现方式
  transformGroup.addChild(new Cylinder(0.2f, 0.50f,app));
  // 创建鼠标旋转
  mr = new MouseRotate();  
  mr.setTransformGroup(transformGroup);
  transformGroup.addChild(mr);
  mr.setSchedulingBounds(bounds);
  // 创建鼠标按滚轮绽放
     MouseZoom mz = new MouseZoom();
     mz.setTransformGroup(transformGroup);
     transformGroup.addChild(mz);
     mz.setSchedulingBounds(bounds);

  scene.addChild(transformGroup);
  // 添加彩色立方体若需要可随意添加
//  transformGroup.addChild(new ColorCube(0.2));
  scene.compile();
  return scene;
 }

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

说明:当按下左键移动时,两个图形同时旋转,按下右键移动时,只有立方体随之移动,滚动滚轮缩放时只有立方体随之缩放,当按下滚轮移动时,只有圆柱体随之缩放。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值