BLOG ENTRY

PV3Dの7種類のPrimitiveObject[as3]

Sphere

papervision3Dで扱えるプリミティブオブジェクトについて、各オブジェクトごとにどうコードが変わるのか差分を比較してみます。

まず最初に、この記事はこちらの記事を参考にさせて頂きました。
勉強させて頂きます。どうもありがとうございます。

で、なにやらpapervision3Dで扱えるオブジェクトは7種類とのこと。

Plane : 平面のオブジェクト
Sphere : 球面のオブジェクト
Cube : 立方体のオブジェクト
Cone : 3角コーン型のオブジェクト
Cylinder : 円柱のオブジェクト
PaperPlane : 紙飛行機のオブジェクト
Arrow : 矢印のオブジェクト

基準となるコードを元に7種類のプリミティブオブジェクトごとにコードを書いていく。
(Flash IDEは必要ありません)

基準となるコード PrimitiveObject.as

package {

	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	import org.papervision3d.core.math.Plane3D;

	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.view.BasicView;

	[SWF(width = "440", height = "270", frameRate = "30", backgroundColor = "#000000")]

	public class PrimitiveObject extends BasicView {

		private var obj:Plane;

		public function PrimitiveObject() {

			var world = new BasicView();
			addChild(world);
			world.startRendering();

			var material = new WireframeMaterial(0xffffff);
			material.doubleSided = true;

			obj = new Plane(material, 500, 500, 1, 1);
			world.scene.addChild(obj);

			addEventListener(Event.ENTER_FRAME, enterHandler);
		}

		private function enterHandler(e:Event):void {
			obj.rotationY += 2;
		}
	}
}

で、これをコンパイルするとこれになる

Plane : 平面のオブジェクト

This movie requires Flash Player 9

このコードのプロパティ
private var obj:Plane;
とオブジェクトのインスタンス生成
obj = new Plane(material, 500, 500, 1, 1);
の2行だけを以下の通り書き換えて全7種類のオブジェクトを表示する

Sphere : 球面のオブジェクト

This movie requires Flash Player 9

private var obj:Sphere;
obj = new Sphere(material, 324, 8, 8);

Cube : 立方体のオブジェクト

This movie requires Flash Player 9

private var obj:Cube;
obj = new Cube(new MaterialsList({all : material}), 400, 400, 400, 1, 1, 1);

Cone : 3角コーン型のオブジェクト

This movie requires Flash Player 9

private var obj:Cone;
obj = new Cone(material, 300, 300, 8, 8);

Cylinder : 円柱のオブジェクト

This movie requires Flash Player 9

private var obj:Cylinder;
obj = new Cylinder(material, 300, 300, 10, 10, -1);

PaperPlane : 紙飛行機のオブジェクト

This movie requires Flash Player 9

private var obj:PaperPlane;
obj = new PaperPlane(material, 4);

Arrow : 矢印のオブジェクト

This movie requires Flash Player 9

private var obj:Arrow;
obj = new Arrow(material);

こんな感じで、オブジェクトのインスタンス生成してる箇所(とその引数)だけで、
後は同じ作り方でOKということがわかりました。

ついでにパラメータも書いとく。

オブジェクトのパラメータ

width : 横幅
height : 高さ
depth : Cubeにおける奥行き
radius : 半径。Sphere では球体の半径で、ConeとCylinderでは底辺の半径。
segmentsW : 横方向の分割数
segmentsH : 縦方向の分割数

パラメータでちょっと適当に遊んでみる

This movie requires Flash Player 9

package {

	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	import org.papervision3d.core.math.Plane3D;

	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.view.BasicView;

	[SWF(width = "440", height = "270", frameRate = "30", backgroundColor = "#000000")]

	public class PrimitiveObject extends BasicView {

		private var obj:Sphere;

		public function PrimitiveObject() {

			var world = new BasicView();
			addChild(world);
			world.startRendering();

			var material = new WireframeMaterial(0xffffff);
			material.doubleSided = true;

			obj = new Sphere(material, 324, 8, 8);
			world.camera.y = 400;
			world.scene.addChild(obj);

			addEventListener(Event.ENTER_FRAME, enterHandler);
		}

		private function enterHandler(e:Event):void {
			with (obj) {
				rotationY 	+= 1;
				rotationX   += 2;
				x 			= 400 * Math.cos(getTimer() / 400);
				z 			= 100 * Math.cos(getTimer() / 400);
				//y 			= 100 * Math.sin(getTimer() / 2000);
				depth   	= 500 * Math.sin(getTimer() / 1000);
				radius 		= 100 * Math.sin(getTimer() / 4000);
				segmentsW  	= 2000 * Math.sin(getTimer() / 1000);
				segmentsH  	= 2000 * Math.sin(getTimer() / 1000);
			}
		}
	}
}

おしまい。

関連記事

  1. papervision3Dをインストールしてサンプル(正六面体cube)を動かすまで[AS3]
  2. BitmapDataクラスのPerlinNoiseメソッドでエフェクト[AS3][filter]
  3. DisplacementMapFilterとperlinNoiseで外部画像を変形[AS3]
  4. 埋め込みフォントを単体の一括管理クラスで行う[as3]
  5. AS3でXMLファイルの内容を読み込んで出力する[AS3]

WRITE COMMENT


(required)


(required)


(required)

MENU