Dec 6

关于moveBackward()和Quaternion四元数

Papervision3D


public class main extends BasicView
{
  private var sphere:Sphere;
  private var _plane:Plane;
  private var _mouse3D:Mouse3D;
  private var slerp:Number = 0;//插值
  private var planeQ:Quaternion = new Quaternion();
  private var mouseQ:Quaternion = new Quaternion();
  private var slerpQ:Quaternion = new Quaternion();
  
  public function main(viewportWidth:Number=640, viewportHeight:Number=480, scaleToStage:Boolean=true, interactive:Boolean=false, cameraType:String="Target")
  {
    viewport.interactive = true;
    Mouse3D.enabled = true;
    _mouse3D = viewport.interactiveSceneManager.mouse3D;//获取点击坐标
    var light:PointLight3D = new PointLight3D();
    light.z = -500;
    var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xFFFFFF, 0);
    material.interactive = true;
    sphere = new Sphere(material, 400, 20, 20);
    scene.addChild(sphere);
    _plane = new Plane(new ColorMaterial(0x00ff00), 80, 80);
    _plane.z = -400; //一开始在球的中间弧顶
    scene.addChild(_plane);
    viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT; //设置图层排序方式
    var planeVl:ViewportLayer = new ViewportLayer(viewport, _plane);
    planeVl.layerIndex = 1;
    viewport.containerSprite.addLayer(planeVl);
    sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, clickHand);
    startRendering();
  }
  private function clickHand(e:InteractiveScene3DEvent):void
  {
    slerp = 0;//每次点击初始化为0
    planeQ = Quaternion.createFromMatrix(_plane.transform);
    mouseQ = Quaternion.createFromMatrix(_mouse3D.transform);
  }
  override protected function onRenderTick(event:Event=null):void
  {
    slerp += (1 - slerp) * 0.1;
    slerpQ = Quaternion.slerp(planeQ, mouseQ, slerp);
    _plane.transform = slerpQ.matrix;
    _plane.moveBackward(400); 
    renderer.renderScene(scene, camera, viewport);      
  }
}



tags:ActionScript3.0  PV3D  

to "关于moveBackward()和Quaternion四元数"

  1. kenting Says:

    _plane.moveBackward(400);
    想请问一下 这句的用意何在?能说说原理吗

  2. emment Says:

    就是相对自身位置向后移动400像素

Leave a Reply