feb19.jp

Nobuhiro Takahashi
Designer / Engineer

Papervision3D 2.0 - Great White

Papervision3D 2.0 - Great White

Papervision3Dが大幅アップデートで2.0(コード名:GreatWhite)に。何が変わったかというと。。。

まぁとりあえずの、サンプル。インタラクティブではないよ。

サンプル

Lightパッケージ追加でライトが使えるようになった。内部の座標計算が、ローカル座標→ワールド座標変換→ビュー座標変換→プロジェクション座標変換→スクリーン座標変換という一般的な3D計算の流れに基づくようになった。Viewパッケージ追加でなんか書き方大幅に変わった。けどBasicViewクラスとか継承すればコードが12行で作れたりするものもあったりで慣れれば便利っぽい。

後はよく分かりませんが、色々変わって検証しなおしって感じなのです。他力本願だとこうなるから、ROXIKの城戸さんみたいに自作3Dフレームワーク作りたいな。城戸さん新作楽しみにしてますー。AS3も慣れてきたし暇ができたらやってみようかな~。

はい。というわけで、以下が上のサンプルのソースです。ドキュメントクラスですよー。

package{
	import flash.display.*;
	import flash.events.*;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.materials.shadematerials.*;
	import org.papervision3d.lights.*;
	public class BasicDocument extends Sprite{
		private var scene:Scene3D;
		private var viewport:Viewport3D;
		private var camera:Camera3D;
		private var renderer:BasicRenderEngine;
		private var objCube:Cube;
		private var objPlane:Plane;
		private var light:PointLight3D;
		public function BasicDocument(){
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.quality = StageQuality.MEDIUM;
			init3D();
		}
		private function init3D():void{
			//ビューポート設定
			viewport = new Viewport3D(0,0,true);
			viewport.opaqueBackground = 0x222222;
			addChild(viewport);
			light = new PointLight3D();
			light.x = light.y = light.z = 500;
			light.z = -100;
			//レンダー設定
			renderer = new BasicRenderEngine();
			//カメラ設定
			camera = new Camera3D();
			camera.z = -300;
			camera.focus = 500;
			camera.zoom = 1;
			//シーン設定
			scene = new Scene3D();
			//マテリアル設定
			var colorMat:ColorMaterial = new ColorMaterial( 0x006699, 1 );
			var wireMat:WireframeMaterial = new WireframeMaterial( 0x0099cc );
			var compoMat:CompositeMaterial = new CompositeMaterial();
			compoMat.addMaterial(colorMat);
			compoMat.addMaterial(wireMat);
			compoMat.doubleSided = true;
			//Plane生成
			objCube = new Cube(new MaterialsList({all:new GouraudMaterial(light)}), 300, 300, 300);
			scene.addChild(objCube);			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		private function onEnterFrame(event:Event):void {
			objCube.rotationX += 2;
			objCube.rotationY += 2;
			renderer.renderScene(scene,camera,viewport);
		}
	}
}

参考:
note.x
miscellaneous
Richard蒸しパン工場

Tweet Share Bookmark

Navigation

prev: AS3でNowLoadingな処理
next: AS3でTweener 1.31.67を使う

Recently Entries