⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplepick.java

📁 包括了JAVA3D(全世界都能看到的网络三维动画)的源代码部分! 很多基础但是却很精彩的例子!有什么不明白的也可以和我交流MSN:guorui0728@hotmail.com
💻 JAVA
字号:
//SimplePick.java
//演示如何使用点取技术
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
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());
		Canvas3D canvas3D = new Canvas3D(null);
		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);
	}
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -