package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Bitmap;
//importするpapervisionのクラス
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.parsers.DAE;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.ColorMaterial;
/**
* ...
* @author l
*/
public class Main extends Sprite
{
private var scene:Scene3D;
private var viewport:Viewport3D;
private var camera:Camera3D;
private var render:BasicRenderEngine;
[Embed (source = "teapot_ani_texture.DAE", mimeType = "application/octet-stream")]
private var teapotModel : Class;
private var teapot:DAE;
[Embed (source="teapot_completemap.jpg")]
private var teapotMap : Class;
public function Main():void
{
var materials : MaterialsList = new MaterialsList();
var bm : Bitmap = new teapotMap();
materials.addMaterial( new BitmapMaterial(bm.bitmapData), "teapot" );
//materials.addMaterial( new ColorMaterial(0xFF0000), "teapot" );
teapot = new DAE(true,'teapot',true);
teapot.addEventListener(FileLoadEvent.LOAD_COMPLETE, onDaeComplete)
teapot.load(new teapotModel(),materials);
}
private function onDaeComplete(event : FileLoadEvent):void
{
// シーンを作成しキューブをシーンに加える
scene = new Scene3D();
scene.addChild(teapot);
// カメラの作成とカメラ座標の設定
camera = new Camera3D();
camera.x = 250;
camera.y = 0;
camera.z = 250;
//ビューポートを作成
viewport = new Viewport3D(200, 200);
this.addChild(viewport);
// レンダラの作成
render = new BasicRenderEngine();
//ENTER_FRAMEにてレンダリングを行う
this.addEventListener(Event.ENTER_FRAME, render3D);
}
private function render3D(event:Event):void
{
//カメラの上下移動
camera.y = (mouseY - stage.stageHeight * 0.5) *10 ;
camera.x = (mouseX - stage.stageWidth * 0.5) * 5 ;
// カメラが中央のCubeを見るように設定してレンダリング
camera.lookAt(teapot);
render.renderScene(scene, camera, viewport);
}
}
}