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

📄 demo_main.java

📁 一个java3D的动画程序
💻 JAVA
字号:
/*
 * Created on 2005-7-16
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author carso
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import com.sun.j3d.utils.geometry.ColorCube; 
import java.applet.Applet; 
import java.awt.*; 
import com.sun.j3d.utils.applet.MainFrame; 
import com.sun.j3d.utils.universe.*; 
import javax.media.j3d.*; 
import javax.vecmath.*;

import java.awt.GraphicsConfiguration;
import Axis_info.Axis_info;

//以下这些包为自己创建的包
import AixsSet.*;
import Move.*;
import View_Autoget.*;
import Loader.*;


public class Demo_main extends Applet{
	
	public BranchGroup createSceneGraph(){
		
			// Create the root of the branch graph
			BranchGroup objRoot = new BranchGroup();
			TransformGroup spin = new TransformGroup();
			spin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
			spin.addChild(new ColorCube(0.1));
			
			// Spins continuously with a period of 10 sec
			Alpha alpha = new Alpha(-1, 10000);
			RotationInterpolator rotInt = new RotationInterpolator(alpha, spin);
			rotInt.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 400.0));
			objRoot.addChild(spin);
			objRoot.addChild(rotInt);
			
			AmbientLight lightA = new AmbientLight();
			lightA.setInfluencingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 400.0));
			objRoot.addChild(lightA);
			DirectionalLight lightD1 = new DirectionalLight();
			lightD1.setInfluencingBounds(new BoundingSphere(
			new Point3d(0.0,0.0,0.0),400.0));
			Vector3f direction = new Vector3f(-1.0f, -1.0f, -1.0f);
			direction.normalize();
			lightD1.setDirection(direction);
			lightD1.setColor(new Color3f(Color.white));
			objRoot.addChild(lightD1);
			objRoot.compile();
			return objRoot;
			}

	public BranchGroup set_axis(){
		BranchGroup objRoot=new BranchGroup();

		//draw 3D Axis
		Shape3D line=new Draw3D_Axis();
		objRoot.addChild(line);
		 
		Shape3D stripline=new Draw3D_Stripline(new Axis_info().getvert(),new Axis_info().getStripCount());
		Shape3D stripline1=new Draw3D_Stripline(new Axis_info().getvert1(),new Axis_info().getStripCount());
		objRoot.addChild(stripline);
		objRoot.addChild(stripline1);
		return objRoot;
	}		
	public Demo_main(){
		//setLayout(new BorderLayout());
		setLayout(new GridLayout());
		GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
		Canvas3D canvas = new Canvas3D(config);
		add(canvas);
		
		//Define VirtualUniverse and attach Locale
		VirtualUniverse universe = new VirtualUniverse();
		Locale locale = new Locale(universe);
		
		//set location of view init
		Transform3D view_t3d = new Transform3D();
	     Vector3f view_v3f = new Vector3f();
	     view_t3d.rotZ(1.57*3);
	     view_v3f.set(0,0,0);
	     view_t3d.setTranslation(view_v3f);
		
		
		// Define ViewPlatform TransformGroup
		TransformGroup viewPlatformTransform = new TransformGroup();
		viewPlatformTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		viewPlatformTransform.setTransform(view_t3d);
		
		//Define content branch graph
		BranchGroup scene =createSceneGraph();
		
		//Create view graph
		
		Axis_info view_axis_info=new Axis_info();
		view_axis_info.setSections(90);
		View_follow view_fol=new View_follow(90);
		
		view_fol.setKnots(view_axis_info.getKnots());
		//view_fol.setQuats(view_axis_info.getQuats());
		view_fol.setPositions(view_axis_info.getPositions_inViewFol());
		//view_fol.setKnots(view_axis_info.getKnot_InMoveInPath());
		//view_fol.setPositions(view_axis_info.getPosition());
		//view_fol.setQuats(view_axis_info.getQuat_InMoveInPath());
		BranchGroup view =view_fol.createViewGraph(canvas,viewPlatformTransform);
		
		//Create Axis graph
		BranchGroup axis=set_axis();
		
		//And attach both to the Locale
		locale.addBranchGraph(scene);
		locale.addBranchGraph(view);
		locale.addBranchGraph(axis);
		
		 //创建一个沿指定路线运动的物体
	     Move_in_Certain_path cube_move0=new Move_in_Certain_path();
	     BranchGroup cube_move_graph=cube_move0.createAnimOfMove(new Axis_info().getPosition(),new Vrml_loader().LoadFile_graph("/material/zuqiu.WRL"));
	     locale.addBranchGraph(cube_move_graph);
	     
	     //创建沿坐标轴运动的物体
	     Move_In_Axis_direction x_move0=new Move_In_Axis_direction();
	     BranchGroup axis_move_graph=x_move0.Move_in_direction(-40.f,30.f);
	     locale.addBranchGraph(axis_move_graph);
	     
	     //创建摄象头跟随移动的物体
	     Camera_follow cube_follow0=new Camera_follow();
	     TransformGroup file_load_obj=new Vrml_loader().LoadFile_graph("material/zuqiu.WRL");
	     BranchGroup camera_follow_graph=cube_follow0.create_Camera_follow(file_load_obj);
	     locale.addBranchGraph(camera_follow_graph);
	     
		
		
		
		/*为了便于观察效果,再加上一个视角*/
		Canvas3D view2_canvas = new Canvas3D(config);
	     add(view2_canvas);
	     VirtualUniverse view2_univ=new VirtualUniverse();
	     Locale view2_locale=new Locale(view2_univ);
	     
	     
	     Transform3D view2_t3d = new Transform3D();
	     Vector3f view2_v3f = new Vector3f();
	     //view2_t3d.rotY(1.57*3);
	     view2_v3f.set(2,5,60);
	     view2_t3d.setTranslation(view2_v3f);
	     TransformGroup view2_tfg=new TransformGroup();
	     
	     //then add another viewplatform
	     ViewPlatform   view2_plat=new ViewPlatform();
	     
	     view2_plat.setActivationRadius(400);
	     view2_plat.setViewAttachPolicy(View.NOMINAL_HEAD);
	     view2_tfg.setTransform(view2_t3d);
	     
	     View view2=new View();
	     view2.addCanvas3D(view2_canvas);
	     view2.attachViewPlatform(view2_plat);
	     view2.setPhysicalBody(new PhysicalBody());
	     view2.setPhysicalEnvironment(new PhysicalEnvironment());
	     //create a new BranchGroup to add this
	     BranchGroup view2_bgp=new BranchGroup();
	     //view2_bgp.addChild(view2_plat);
	     view2_tfg.addChild(view2_plat);
	     
	     view2_bgp.addChild(view2_tfg);
	     
	     view2_locale.addBranchGraph(view2_bgp);
	     
	     
	     //add a BranchGroup to draw axis to show more easy
	     BranchGroup setAxis=set_axis();
	     view2_locale.addBranchGraph(setAxis);
	     view2_locale.addBranchGraph(createSceneGraph());
	     
	     //add a BranchGroup to show a cube's movement
	      
	     Move_in_Certain_path cube_move=new Move_in_Certain_path();
	     
	     //Move.Move_in_Certain_path cube_move.createAnimOfMove()
	     //give a certain path and move in it
	     Point3f[] p=new Axis_info().getPosition();
	     view2_locale.addBranchGraph(cube_move.createAnimOfMove(p,new Vrml_loader().LoadFile_graph("material/zuqiu.WRL")));
	     
	     //add a BranchGroup to show a cube move in a direction
	     Move_In_Axis_direction x_move=new Move_In_Axis_direction();
	     view2_locale.addBranchGraph(x_move.Move_in_direction(-50,50));
	     	
	     
	     //add a BranchGroup to show a cube move and a camera follow
	     TransformGroup view2_obj_file_TransG=new Vrml_loader().LoadFile_graph("material/zuqiu.WRL");
	     //BranchGroup view2_obj_file_BranchG=new BranchGroup();
	     //view2_obj_file_BranchG.addChild(view2_obj_file_TransG);
	     Camera_follow cube_follow=new Camera_follow();
	     view2_locale.addBranchGraph(cube_follow.create_Camera_follow(view2_obj_file_TransG));
	     
	     
	     //加载vrml文件,返回值为BranchGroup对象 
	     Vrml_loader file_graph=new Vrml_loader();
	     TransformGroup file_graph_transG=file_graph.LoadFile_graph("material/nishuihan.WRL");
	     BranchGroup file_graph_branG=new BranchGroup();
	     file_graph_branG.addChild(file_graph_transG);
	     view2_locale.addBranchGraph(file_graph_branG);
	     
	     
	     /*利用View_Autoget包中的get_view生成一个新的视角*/
	     get_view view3=new get_view();
	     Canvas3D view3_canvas=new Canvas3D(config);
	     add(view3_canvas);
	     
	     Vector3f view3_vector3f=new Vector3f();
	     view3_vector3f.set(5,65,0);
	     Transform3D view3_transform3D=new Transform3D();
	     view3_transform3D.rotX(1.57*3);
	     view3_transform3D.setTranslation(view3_vector3f);
	     TransformGroup view3_transformGroup=new TransformGroup();
	     view3_transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	     view3_transformGroup.setTransform(view3_transform3D);
	     BranchGroup view3_branchgroup=view3.get_New_View(view3_canvas,view3_transformGroup);
	     VirtualUniverse view3_univ=new VirtualUniverse();
	     Locale view3_locale=new Locale(view3_univ);
	     view3_locale.addBranchGraph(view3_branchgroup);
	     view3_locale.addBranchGraph(createSceneGraph());

	     //add a BranchGroup to show a cube's movement
	      
	     Move_in_Certain_path cube_move3=new Move_in_Certain_path();
	     
	     //Move.Move_in_Certain_path cube_move.createAnimOfMove()
	     //give a certain path and move in it
	     
	     view3_locale.addBranchGraph(cube_move3.createAnimOfMove(p,new Vrml_loader().LoadFile_graph("material/zuqiu.WRL")));
	     
	     //add a BranchGroup to show a cube move in a direction
	     Move_In_Axis_direction x_move3=new Move_In_Axis_direction();
	     view3_locale.addBranchGraph(x_move3.Move_in_direction(-50,50));
	     	
	     
	     //add a BranchGroup to show a cube move and a camera follow

	    TransformGroup view3_obj_file_TransG=new Vrml_loader().LoadFile_graph("material/me.WRL");
	     BranchGroup view3_obj_file_BranchG=new BranchGroup();
	    view3_obj_file_BranchG.addChild(view3_obj_file_TransG);
	    view3_locale.addBranchGraph(view3_obj_file_BranchG);

	
	     
	     TransformGroup view3_obj_file=new Vrml_loader().LoadFile_graph("material/zuqiu.WRL");
	     Camera_follow view3_cube_follow=new Camera_follow();
	     view3_locale.addBranchGraph(view3_cube_follow.create_Camera_follow(view3_obj_file));
	     

	     //add a BranchGroup to draw axis to show more easy
	     BranchGroup setAxis3=set_axis();
	     view3_locale.addBranchGraph(setAxis3);
		}

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

⌨️ 快捷键说明

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