Flex Builder 2でPapervision3D使ってみる

| | コメント(0) | トラックバック(0)

note.xさんや閃光的網站・弛緩複合体 -Review Division-さん(読み方がわからないです…)ところでかなり詳しく解説されているので参考に(というかパクり?)させていただきました。
使いこなせば面白い表現ができそうだし、簡単そうでもあるのでPlaneオブジェクトを試してみましたよ。

source

package
{
import flash.display.*;
import flash.events.*;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*
import flash.net.URLLoader;
import flash.net.URLRequest;
[SWF(backgroundColor=0x000000)]
public class TestPv3d3 extends Sprite
{
private var loader:URLLoader;
private var externalXML:XML;
private var container:Sprite;
private var scene:MovieScene3D;
private var camera:Camera3D;
private var planeObj:Plane;
private var planeWidth:Number;
private var planeHeight:Number;
private var planeSegment:int;
private var rootNode:DisplayObject3D;
private var material:BitmapFileMaterial;
private var photo:String;
private var valx:Number;
private var valy:Number;
public function TestPv3d3()
{
loadInitXML();
}
private function loadInitXML():void{
loader = new URLLoader;
loader.load(new URLRequest("init.xml"));
loader.addEventListener(Event.COMPLETE, onComplete);
}
private function onComplete(event:Event):void {
if(loader != null){
externalXML = new XML(loader.data );
init3D();
}
}
private function init3D():void {
stage.align = StageAlign.TOP_LEFT;
stage.quality = StageQuality.MEDIUM;
stage.frameRate = 30;
//container
container = new Sprite;
addChild( container );
container.x = Number(externalXML.container.x);
container.y = Number(externalXML.container.y);
//scene
scene = new MovieScene3D( container );
//camera
camera = new Camera3D;
camera.x = Number(externalXML.camera.x);
camera.y = Number(externalXML.camera.y);
camera.z = Number(externalXML.camera.z);
camera.focus = Number(externalXML.camera.focus);
camera.zoom = Number(externalXML.camera.zoom);
//rootnode
rootNode = new DisplayObject3D("rootNode");
scene.addChild(rootNode);
//material
material = new BitmapFileMaterial(externalXML.material.bitmapFile);
material.doubleSided = true;
//3Dobject
planeWidth = Number(externalXML.obj.width);
planeHeight = Number(externalXML.obj.height);
planeSegment = int(externalXML.obj.segment);
planeObj = new Plane(material,planeWidth,planeHeight,
planeSegment,planeSegment);
planeObj.x = Number(externalXML.obj.x);
planeObj.y = Number(externalXML.obj.y);
rootNode.addChild(planeObj);
this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(event:Event):void {
valx = this.container.mouseX;
valy = this.container.mouseY;
planeObj.rotationX = valy;
planeObj.rotationY = valx;
this.scene.renderCamera(camera);
}
}
}

あとから調整・試行錯誤したいパラメータは力技でXMLファイルにもたせてます。(きっともっと効率よく書けるのでしょうが)。XMLファイルの中身は↓な感じです。
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<container>
<x>300</x>
<y>200</y>
</container>
<camera>
<x>0</x>
<y>0</y>
<z>-350</z>
<zoom>1</zoom>
<focus>300</focus>
</camera>
<material>
<bitmapFile>green.jpg</bitmapFile>
</material>
<obj>
<x>0</x>
<y>0</y>
<width>320</width>
<height>180</height>
<segment>2</segment>
</obj>
</data>

日本語でしっかり解説されているものを読みながらなので、ここまでの理解は結構早かったです。
上記のようにすばらしい解説されているサイトがあるので、blogに書きたいことがでてきたらまた紹介しようと思います。

(追記)ASのコードの行間がおかしいですね…

トラックバック(0)

このブログ記事を参照しているブログ一覧: Flex Builder 2でPapervision3D使ってみる

このブログ記事に対するトラックバックURL: http://connect2.jp/mt/mt-trackback.cgi/41

コメントする


画像の中に見える文字を入力してください。