java3d编程 各位大大,最近在学java3d 编程,现在学到在一个group里面添加;两个transformgroup 每一个transformgroup中各有一个图形,现在想用鼠标右键分别拖拽这两个图形请问怎么实现啊??我之前用的就是mousetranslate然后要拖拽的话两个图形会被一起拖拽图形编程java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用点取,参考程序如下://SimplePick.java//演示如何使用点取技术import java.applet.Applet;import java.awt.BorderLayout;import java.awt.Frame;import java.awt.GraphicsConfiguration;import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.geometry.ColorCube;import com.sun.j3d.utils.geometry.Sphere; import com.sun.j3d.utils.universe.*;import com.sun.j3d.utils.behaviors.picking.*;import javax.media.j3d.*;import javax.vecmath.*;import java.awt.event.*;import java.util.Enumeration;public class SimplePick extends Applet { // 创建外观 Appearance createAppearance() { Appearance appear = new Appearance(); Material material = new Material(); appear.setMaterial(material); return appear; } // 创建自己的回调类,用来改变灯的状态 public class MyCallbackClass extends Object implements PickingCallback{ DirectionalLight myLight; boolean state; public MyCallbackClass(DirectionalLight lightD){ this.myLight=lightD; // 保存引用 this.state=false; } public void transformChanged(int type, TransformGroup tg) { state=!state; myLight.setEnable(state); //改变该对象当前的状态 } } public BranchGroup createSceneGraph(Canvas3D canvas) { BranchGroup objRoot = new BranchGroup(); // 创建根分支节点 TransformGroup objTG = null; Transform3D transform = new Transform3D(); BoundingSphere bounds = new BoundingSphere(); //创建环境光 AmbientLight lightA = new AmbientLight(); lightA.setEnable(true); lightA.setColor(new Color3f( 0.1f, 0.1f, 0.1f )); lightA.setInfluencingBounds(bounds); objRoot.addChild(lightA); //创建平行光 DirectionalLight lightD = new DirectionalLight(); lightD.setDirection (new Vector3f(-1.0f,-1.0f,-1.0f)); lightD.setColor (new Color3f(0.0f,1.0f,1.0f)); lightD.setInfluencingBounds(bounds); lightD.setCapability(DirectionalLight.ALLOW_STATE_WRITE ); lightD.setEnable(false); // 允许该光源的状态动态改变 objRoot.addChild(lightD); //创建点取旋转对象 PickRotateBehavior pickRotate = new PickRotateBehavior(objRoot, canvas, bounds); objRoot.addChild(pickRotate); //设置回调类 PickingCallback myCallback = new MyCallbackClass(lightD); pickRotate.setupCallback(myCallback); //创建点取平移对象 PickTranslateBehavior pickTranslate = new PickTranslateBehavior(objRoot, canvas, bounds); objRoot.addChild(pickTranslate); //创建点取缩放对象 PickZoomBehavior pickZoom = new PickZoomBehavior(objRoot, canvas, bounds); objRoot.addChild(pickZoom); // 分别创建三个支持点取的物体 transform.setTranslation(new Vector3f(-0.6f, 0.6f, -1.0f)); objTG = new TransformGroup(transform); objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING); objTG.addChild(new ColorCube(0.3)); objRoot.addChild(objTG); transform.setTranslation(new Vector3f(-0.6f, -0.6f, -1.0f)); objTG = new TransformGroup(transform); objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING); objTG.addChild(new ColorCube(0.3)); objRoot.addChild(objTG); transform.setTranslation(new Vector3f(0.6f, -0.6f, -1.0f)); objTG = new TransformGroup(transform); objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING); objTG.addChild(new ColorCube(0.3)); objRoot.addChild(objTG); // 创建一个不支持点取,但支持光照效果的物体 transform.setTranslation(new Vector3f( 0.6f, 0.6f, -1.0f)); objTG = new TransformGroup(transform); Sphere ball=new Sphere(0.5f,Sphere.GENERATE_NORMALS,createAppearance()); objTG.addChild(ball); objRoot.addChild(objTG); objRoot.compile(); return objRoot; } public SimplePick() { setLayout(new BorderLayout()); GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas3D=new Canvas3D(config); add("Center", canvas3D); SimpleUniverse simpleU = new SimpleUniverse(canvas3D); BranchGroup scene = createSceneGraph(canvas3D); simpleU.getViewingPlatform().setNominalViewingTransform(); simpleU.addBranchGraph(scene); } public static void main(String[] args) { Frame frame = new MainFrame(new SimplePick(), 256, 256); }} 关于classpath设置的简单问题 Java for循环优化 使用了2个开源类库,这两个类库都需要dom4j做支持,但需求的版本不一样,怎么处理? 为什么编写的Java小程序,菜单无法显示出来 TextBox有几个事件,属性,方法。各有什么作用啊 计算两个时间差的问题 新手的迷茫``` 关于windowlistner的一个基本问题??? a easy question about applet!3x! 谁做过QA,软件测试的自动化方法谁能介绍! 如何编写java代码,来实现调用java.exe并执行.class文件? 初学匿名内部类,求救
//演示如何使用点取技术
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.picking.*;
import javax.media.j3d.*;
import javax.vecmath.*;import java.awt.event.*;
import java.util.Enumeration;public class SimplePick extends Applet { // 创建外观
Appearance createAppearance() {
Appearance appear = new Appearance();
Material material = new Material();
appear.setMaterial(material);
return appear;
}
// 创建自己的回调类,用来改变灯的状态
public class MyCallbackClass extends Object implements PickingCallback{
DirectionalLight myLight;
boolean state;
public MyCallbackClass(DirectionalLight lightD){
this.myLight=lightD;
// 保存引用
this.state=false;
}
public void transformChanged(int type, TransformGroup tg) {
state=!state;
myLight.setEnable(state);
//改变该对象当前的状态
}
} public BranchGroup createSceneGraph(Canvas3D canvas) {
BranchGroup objRoot = new BranchGroup();
// 创建根分支节点
TransformGroup objTG = null;
Transform3D transform = new Transform3D();
BoundingSphere bounds = new BoundingSphere();
//创建环境光
AmbientLight lightA = new AmbientLight();
lightA.setEnable(true);
lightA.setColor(new Color3f( 0.1f, 0.1f, 0.1f ));
lightA.setInfluencingBounds(bounds);
objRoot.addChild(lightA);
//创建平行光
DirectionalLight lightD = new DirectionalLight();
lightD.setDirection (new Vector3f(-1.0f,-1.0f,-1.0f));
lightD.setColor (new Color3f(0.0f,1.0f,1.0f));
lightD.setInfluencingBounds(bounds);
lightD.setCapability(DirectionalLight.ALLOW_STATE_WRITE );
lightD.setEnable(false);
// 允许该光源的状态动态改变
objRoot.addChild(lightD);
//创建点取旋转对象
PickRotateBehavior pickRotate = new PickRotateBehavior(objRoot, canvas, bounds);
objRoot.addChild(pickRotate);
//设置回调类
PickingCallback myCallback = new MyCallbackClass(lightD);
pickRotate.setupCallback(myCallback);
//创建点取平移对象
PickTranslateBehavior pickTranslate = new PickTranslateBehavior(objRoot, canvas, bounds);
objRoot.addChild(pickTranslate);
//创建点取缩放对象
PickZoomBehavior pickZoom = new PickZoomBehavior(objRoot, canvas, bounds);
objRoot.addChild(pickZoom); // 分别创建三个支持点取的物体
transform.setTranslation(new Vector3f(-0.6f, 0.6f, -1.0f));
objTG = new TransformGroup(transform);
objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
objTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
objTG.addChild(new ColorCube(0.3));
objRoot.addChild(objTG);
transform.setTranslation(new Vector3f(-0.6f, -0.6f, -1.0f));
objTG = new TransformGroup(transform);
objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
objTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
objTG.addChild(new ColorCube(0.3));
objRoot.addChild(objTG);
transform.setTranslation(new Vector3f(0.6f, -0.6f, -1.0f));
objTG = new TransformGroup(transform);
objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
objTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
objTG.addChild(new ColorCube(0.3));
objRoot.addChild(objTG);
// 创建一个不支持点取,但支持光照效果的物体
transform.setTranslation(new Vector3f( 0.6f, 0.6f, -1.0f));
objTG = new TransformGroup(transform);
Sphere ball=new Sphere(0.5f,Sphere.GENERATE_NORMALS,createAppearance());
objTG.addChild(ball);
objRoot.addChild(objTG);
objRoot.compile(); return objRoot;
} public SimplePick() {
setLayout(new BorderLayout());
GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D=new Canvas3D(config);
add("Center", canvas3D);
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
BranchGroup scene = createSceneGraph(canvas3D);
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
} public static void main(String[] args) {
Frame frame = new MainFrame(new SimplePick(), 256, 256);
}
}