Jme里的 update() 方法是在运行中调用的 . 为了显示运动效果 , 就必须对它做文章了 . 一般几十毫秒更新一次 .
控制照相机的运动.( 既然可以控制照相机节点 , 那么就可以控制其它类型的节点 )
用照相机做成照相机节点
先新建一个三维向量数组. 做成贝塞尔曲线 .
用曲线和照相机节点新建曲线控制器
曲线控制器设置成重复的, 还可以设置速度
在照相机节点中加入曲线控制器
最后把照相机节点加入场景中即可
照相机是在不断运动中的. 那么视锥就要变化 .
在update() 方法中控制照相机的视锥 . 包括 up,left,direction.
Camera的 direction 要通过照相机的位置和被看物体的中心位置确定 .
有了direction 后 up 和 left 就好确定了 .
不过JME 的 LOD 例子中update()里的方式有些奇怪 !
CurveController 例子分析:在这里不用自己调用update()方法.
有了这个,就可以让我的行星运动了
Capsule ca=new Capsule("胶囊",5,30,5,5f,10f); node1.attachChild(ca); //往node1中加上物体 Vector3f[] points=new Vector3f[]{ new Vector3f(3,0,0), new Vector3f(2.5f,0,-2.5f), new Vector3f(0,0,6), new Vector3f(-7,0,0), new Vector3f(-4.5f,4.5f,0), new Vector3f(3,0,0) }; //这个将是物体的运动轨迹点 BezierCurve bc=new BezierCurve("objpath",points); //用物体的轨迹和物体创建控制器 CurveController cc=new CurveController(bc,node1); cc.setRepeatType(Controller.RT_WRAP);//重复 cc.setSpeed(2f);//设置速度 node1.addController(cc);//往要控制的物体中加上控制器 //这里不知咋回事,创建控制器时用到了node1,后又在node1中加上了控制器 //肯定有解决方案,努力! rootNode.attachChild(node1);