我现在做一个有关java3D的项目,由于有关的资料很少,官方的资料也不多,所以特来向大家求助!1.在java3D中怎么实现骨架?也就是说,一个物体运动了之后,后面的物体也跟随其轨迹一起运动?
2.在java3D中怎么实现如下的功能:
   摄象头跟随物体一起运动,也就是第一人称视角运动,跟随的效果我已经实现,在附件中我会跟上,不过现在的问题是,镜头会一直按照它的原方向运动,不会转弯了!我现在有730分,谁解决了就给谁!
大家一起讨论啊,其实都是3D中的一些小问题,不过我才接触不久。伏上我的主要代码:
/***********************初始化摄象头运动的相关参数*******************/
private void initMovement(){
Axis_info Trackline1=new Axis_info("carso");
this.TrackPos=new Point3f[Trackline1.getTrackPos().length];
TrackPos=Trackline1.getTrackPos();
this.knots=new float[Trackline1.getKnots().length];
this.knots=Trackline1.getKnots();
System.out.println("************完成摄象头运动参数的初始化**********");
}

/*************************创建摄象头跟随的效果**********************/
public BranchGroup createFollowingCamera(){
initMovement();
/*关于火车仿真我觉得用java3d实现骨骼动画应该比较容易,因为不用考虑关
 * 节处的平滑无缝变形。直接用java3d中的场景图数据结构就可表示火车骨
 * 骼结构,用分支图(BG)作为骨骼的起点,加入子节点TG,在TG加入车头
 * 模型节点表示车头,对该TG操作就可对车头进行移动、旋转;同样,在车头
 * 的TG中加入TG来表示下一节车箱,依此类推,整列火车的基本骨骼结构就表
 * 示出来了,车头的移动会带动整列火车,其它的因素信息往其中加,如对每节
 * 车箱加入权重信息等。*/
BranchGroup FollowingBG=new BranchGroup();
   ViewingPlatform vp = su.getViewingPlatform();
    vp.getViewPlatform();
    View MyView=su.getViewer().getView();
    MyView.setBackClipDistance(100);
    MyView.setFrontClipDistance(0.001);
    MyView.setFieldOfView(Math.toRadians(90.0));
    
    TransformGroup steerTG = vp.getViewPlatformTransform();
    
    Transform3D t3d = new Transform3D();
    steerTG.getTransform( t3d );
    //t3d.lookAt(new Point3d(0,0,-26),new Point3d(0,0,-25),new Vector3d(0,0.1,0));
    t3d.setTranslation( new Vector3d(0, 0, Z_START) );
    steerTG.setTransform(t3d);     /******************************************************
     * 新建一个BranchGroup对象trainBG,第三个transformGroup:sub_3,
     * 作为trainBG的子TG,trainBG作为sub_trans的子接点,sub_3*
     * 中通过Lorder.Vrml_loader(),取得火车模型            ***
     * ****************************************************/
    
    Vrml_loader train=new Vrml_loader();
    //DS_Loader train=new DS_Loader();
    TransformGroup sub_3=new TransformGroup();
    sub_3=train.LoadFile_graph("models/traintou.wrl",1f);
    Transform3D    sub_3D=new Transform3D();
    //sub_3D.rotY(1.57*3);
    sub_3D.setTranslation(new Vector3d(0,0.4,0));
    sub_3.setTransform(sub_3D);
    ColorCube sub_2Cube=new ColorCube(10);
    sub_3.addChild(sub_2Cube);     /****************************************************
     * sub_3的设置暂时结束*********************************
     * **************************************************/
    
    /***************添加第二个火车头********************/
    TransformGroup sub_4=new TransformGroup();
    sub_4=train.LoadFile_graph("models/traintou.wrl",1f);
    Transform3D    sub_4D=new Transform3D();
    sub_4D.setTranslation(new Vector3d(0.2,0,0));
    sub_4.setTransform(sub_4D);
    sub_3.addChild(sub_4);
    /******************添加结束************************/
    
         /*another TransformGroup :sub_trans*/
    // t3d.rotY(1.57);
    TransformGroup sub_trans=new TransformGroup();
    sub_trans.setTransform(t3d);
    sub_trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    //sub_trans.addChild(trainBG);
    sub_trans.addChild(sub_3);
         
    
    /*******************************************
     * !!!下面这条语句很重要,如果不这样做将会提示错误*/
    vp.detach();
    sub_trans.addChild(vp);
    /*****************************************/
    
    OrbitBehavior orbit =
     new OrbitBehavior(view2_canvas, OrbitBehavior.REVERSE_ALL);
     orbit.setSchedulingBounds(bound);
     vp.setViewPlatformBehavior(orbit);
    
    
      Alpha xtranAlpha2 = new Alpha(-1,100000);
/*
      PositionInterpolator pos=new PositionInterpolator(
       xtranAlpha2,
sub_trans,
t3d,
-10,
10

      );
*/
    
       PositionPathInterpolator pos = new PositionPathInterpolator(
    xtranAlpha2,
  sub_trans,
  t3d,
  //knots_inline,
  //positions
  knots,
  TrackPos
  );
       
       
       pos.setSchedulingBounds(bound);
       FollowingBG.addChild(sub_trans);
       FollowingBG.addChild(pos);
       FollowingBG.addChild(drawTracks());
       lightScene(FollowingBG);  
       
       /***********************设置非跟随镜头场面*****************/
       MovementBG=new BranchGroup();
       TransformGroup MovementTG=new TransformGroup();
       MovementTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
       MovementTG.addChild(new ColorCube(0.04));
       MovementBG.addChild(MovementTG);
       PositionPathInterpolator pos1 = new PositionPathInterpolator(
    xtranAlpha2,
    MovementTG,
  t3d,
  //knots_inline,
  //positions
  knots,
  TrackPos
  );
       pos1.setSchedulingBounds(bound);
       MovementBG.addChild(pos1);
       
       /*********************结束设置***************************/
       
       
     
       //sub_3.addChild(sub_trans);
       //sceneBG.addChild(sub_trans);
       //FollowingBG.addChild(sub_3);        return FollowingBG;

}