本ソースはSaqoosha氏の FLARToolKitを利用し、
FLARToolKit Starter KitのSimpleCubeを元に作成させて頂きました。

package
{
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.parsers.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;

import flash.events.*;

public class Main extends PV3DARApp
{
private var _plane:Plane;
private var _cube:Cube;
private var _daeData :Collada;
private var before_round_flg:Boolean = true;
private var Is_landing_time:Boolean = false;
private var Is_enough_alti:Boolean = false;

private var theta:Number = 0;
private var pre_x:Number = 0;
private var pre_y:Number = 0;
private var tmp_z:Number = 0;


public function Main():void
{
this.init('Data/camera_para.dat', 'Data/50_anniv.pat');
}

protected override function onInit():void {
super.onInit();
var light:PointLight3D = new PointLight3D();
light.x = 0;
light.y = 1000;
light.z = -1000;

_daeData = new Collada('cg/hikou.dae', new MaterialsList(),0.03);
this._daeData.rotationX = 90;
this._baseNode.addChild(_daeData);
this.addEventListener(Event.ENTER_FRAME, this._onEnterFrame);
}

protected override function _onEnterFrame(e:Event = null):void {
super._onEnterFrame(e);

if (this._daeData) {

if(!Is_enough_alti && !Is_landing_time){
this._daeData.z += 0.5;
tmp_z += 0.5;
if (tmp_z < 65) {
this._daeData.z -= 0.5;
}
if (this._daeData.z > 65) {
Is_enough_alti = true;
}
}

if (Is_enough_alti) {
if(before_round_flg){
this._daeData.x += 1.0;
this._daeData.rotationZ += 0.9;
if(this._daeData.x == 100){before_round_flg = false;}

}else {
theta += 0.01;
this._daeData.x = Math.cos(theta) * 100;
this._daeData.y = Math.sin(theta) * 100;

if (this._daeData.x != 0) {
if (this._daeData.y > 0) {
this._daeData.rotationZ = 180 + Math.atan((this._daeData.y - pre_y)/(this._daeData.x - pre_x)) * 180 / Math.PI;
}else {
this._daeData.rotationZ = Math.atan((this._daeData.y - pre_y) / (this._daeData.x - pre_x)) * 180 / Math.PI;
}
}
}
pre_x = this._daeData.x;
pre_y = this._daeData.y;
this._daeData.rotationX = 90;
}

}
}



}

}