http://linfuqing.wsu.wsu.cn/zerO/Buildmodel.swf
/**
* Copyright 2009 (c) Lin Fuqing,zerO3D
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import zerO.geom.Geometry;
import zerO.geom.basegeometry.Cube;
import zerO.geom.basegeometry.Cylinder;
import zerO.objects.DAE;
import zerO.objects.Track;
import zerO.render.Zsort;
import zerO.scenes.Scene3D;
import zerO.veiw.Camera3D;
import zerO.veiw.Viewport3D;
//[SWF(frameRate=100, backgroundColor=0xffffff)]
public class BuildModel extends Sprite
{
//追踪,可以不用,为懒人开发的类
private var track:Track;
//视口,必须
private var viewport:Viewport3D;
//场景,必须
private var scene:Scene3D;
//渲染器,必须,Zsort,我的最爱
private var render:Zsort;
//定义一个凌锥和一个正方体
private var a:Cylinder = new Cylinder();
private var b:Cube = new Cube();
//定义相机,可以不用
private var camera:Camera3D = new Camera3D();
//定义一个DAE
private var dae:DAE;
/**
* 模型实例
*/
public function BuildModel()
{
//追踪需要穿最上层的精灵上去
track = new Track( this );
//DAE,参数分别是DAE地址,图片目录(地址自动找),是否平滑处理,这个汽车是Flash3D研究所的东西,抱歉先拿来用了
dae = new DAE( "texture/car.XML","texture" );
//设置DAE缩放,可以不用
dae.scale = 10;
//监听DAE读取
dae.addEventListener( Event.COMPLETE,onComplete );
//监听键盘事件,控制相机方向键对应上下左右移动
stage.addEventListener( KeyboardEvent.KEY_DOWN,onKeyDown );
}
/**
* 读取完成,监听祯并初始化
*/
private function onComplete( event:Event ):void
{
addEventListener( Event.ENTER_FRAME,onEnterFrame );
init();
}
/**
* 初始化
*/
private function init():void
{
//创建新场景
scene = new Scene3D();
//设置几何体位置(默认为(0,0,0))
b.x = 200;
b.z = 200;
a.y = 500;
//将几何体加到场景中,一定记得加
scene.add( a );
scene.add( b );
//从DAE中读取几何体,读取的名字就是你从3DMAX阿什么的读进来的名字
var geometry:Geometry = dae.getChildByName( "MeshShape" ).geometry;
//加到场景中
scene.add( geometry );
//创建新视口,参数是视口宽度,高度和场景,这里设置为舞台宽高
viewport = new Viewport3D( stage.stageWidth,stage.stageHeight,scene );
//创建渲染器,参数为视口
render = new Zsort( viewport );
//一定要记得将视口加到显示清单中
addChild( viewport );
//设置相机,后面还有一个参数是相机切换插值,设置后可做出很华丽的动画
viewport.onCamera( camera );
//将模型加到场景完成后请build一下,谢谢
scene.build();
}
/**
* 开始
*/
private function onEnterFrame( event:Event ):void
{
//相机真实方向追踪...玩过CS或者看一下效果就知道了,不必须,可以直接设置相机方向.
track.cameraTrueDirection( camera );
//旋转几何体
a.rotationY +=1;
b.rotationY +=1;
//渲染器渲染
render.render();
}
/**
* 键盘监听,略过
*/
private function onKeyDown( event:KeyboardEvent ):void
{
switch( event.keyCode)
{
case Keyboard.UP:
camera.y -= 50;
break;
case Keyboard.DOWN:
camera.y += 50;
break;
case Keyboard.LEFT:
camera.x -= 50;
break;
case Keyboard.RIGHT:
camera.x += 50;
break;
default:
break;
}
}
}
}