papervision3Dで扱えるプリミティブオブジェクトについて、各オブジェクトごとにどうコードが変わるのか差分を比較してみます。
まず最初に、この記事はこちらの記事を参考にさせて頂きました。
勉強させて頂きます。どうもありがとうございます。
で、なにやらpapervision3Dで扱えるオブジェクトは7種類とのこと。
Plane : 平面のオブジェクト
Sphere : 球面のオブジェクト
Cube : 立方体のオブジェクト
Cone : 3角コーン型のオブジェクト
Cylinder : 円柱のオブジェクト
PaperPlane : 紙飛行機のオブジェクト
Arrow : 矢印のオブジェクト
基準となるコードを元に7種類のプリミティブオブジェクトごとにコードを書いていく。
(Flash IDEは必要ありません)
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;
}
}
}
で、これをコンパイルするとこれになる
このコードのプロパティ
private var obj:Plane;
とオブジェクトのインスタンス生成
obj = new Plane(material, 500, 500, 1, 1);
の2行だけを以下の通り書き換えて全7種類のオブジェクトを表示する
private var obj:Sphere; obj = new Sphere(material, 324, 8, 8);
private var obj:Cube;
obj = new Cube(new MaterialsList({all : material}), 400, 400, 400, 1, 1, 1);
private var obj:Cone; obj = new Cone(material, 300, 300, 8, 8);
private var obj:Cylinder; obj = new Cylinder(material, 300, 300, 10, 10, -1);
private var obj:PaperPlane; obj = new PaperPlane(material, 4);
private var obj:Arrow; obj = new Arrow(material);
こんな感じで、オブジェクトのインスタンス生成してる箇所(とその引数)だけで、
後は同じ作り方でOKということがわかりました。
ついでにパラメータも書いとく。
width : 横幅
height : 高さ
depth : Cubeにおける奥行き
radius : 半径。Sphere では球体の半径で、ConeとCylinderでは底辺の半径。
segmentsW : 横方向の分割数
segmentsH : 縦方向の分割数
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);
}
}
}
}
おしまい。