PV3Dのバージョンが2.0になってから、少しレンダリングの方法が変わったので、忘れないようにメモメモ。
おでんおでん。
「PV3D_Basic.as」というファイルを作り、中に以下のコードを書く。
立方体だけぐるぐる回っています。
立方体のマテリアルは面ごとに設定しないとエラーになっちゃうみたい。
んで、これを新規で作ったflaファイルのプロパティのドキュメントクラスに「PV3D_Basic」と書いてパブリッシュすればおでんのできあがり。
おでんおでん。
「PV3D_Basic.as」というファイルを作り、中に以下のコードを書く。
package {
import mx.core.UIComponent;
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.cameras.FreeCamera3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.*;
public class PV3D_Basic extends Sprite {
private var container:Sprite;
private var vp:Viewport3D;
private var scene:Scene3D;
private var camera:FreeCamera3D;
private var rootNode:DisplayObject3D;
private var rdr:BasicRenderEngine;
//プリミティブの定義
private var cube:Cube;
private var sphere:Sphere;
private var cylinder:Cylinder;
private var cone:Cone;
private var plane:Plane;
public function PV3D_Basic() {
//初期化
init();
}
private function init():void{
init3D();
rootNode.addChild(mkCube(0,-175,0)); //立方体を作る
rootNode.addChild(mkSphere(0,0,0)); //球を作る
rootNode.addChild(mkCylinder(0,-100,0)); //シリンダーを作る
rootNode.addChild(mkCone(0,100,0)); //円錐を作る
rootNode.addChild(mkPlane(0,0,0)); //板を作る
//繰り返し処理
addEventListener(Event.ENTER_FRAME,expEnterFrame);
}
private function init3D():void {
//スプライト作成
container=new Sprite ;
addChild(container);
//ビューポート作成
vp=new Viewport3D(stage.stageWidth,stage.stageHeight,true,true);
container.addChild(vp);
//シーン作成
scene=new Scene3D;
//レンダラー作成
rdr=new BasicRenderEngine;
//カメラ作成
camera =new FreeCamera3D;
camera.zoom =3;
camera.focus =300;
//ルートノード
rootNode=scene.addChild(new DisplayObject3D("rootNode"));
}
//レンダリング
public function expEnterFrame(e:Event):void {
cube.rotationY += 10;
rdr.renderScene(scene,camera,vp);
}
//立方体
private function mkCube(xPos,yPos,zPos):DisplayObject3D {
var wireMat:WireframeMaterial=new WireframeMaterial();
wireMat.lineAlpha=.5;
var colMat:ColorMaterial = new ColorMaterial( 0xff00ff ,.8);
colMat.oneSide=false;
colMat.lineColor=0xFFFF00;
var cubeMat:MaterialsList = new MaterialsList({
front :colMat,
back :wireMat,
right :wireMat,
left :wireMat,
top :wireMat,
bottom :wireMat
});
var w:Number =50; //幅
var h:Number =50; //高さ
var d:Number =50; //奥行き
var segmentsS:Number =2; //横面分割数
var segmentsT:Number =4; //奥行き分割数
var segmentsH:Number =8; //縦面分割数
var insideFaces:int =0; //裏返す面の指定?
var excludeFaces:int =0; //非表示する面の指定?
var initObject:Object =null;
cube=new Cube(cubeMat,w,d,h,segmentsS,segmentsT,segmentsH,insideFaces,excludeFaces,initObject);
cube.x=xPos;
cube.y=yPos;
cube.z=zPos;
return cube;
}
//球体
private function mkSphere(xPos,yPos,zPos):DisplayObject3D {
var sphereMat:MaterialObject3D = new WireframeMaterial();
var radius:Number =50; //半径
var segmentsW:int =8; //横の分割数
var segmentsH:int =6; //縦の分割数
var initObject:Object =null;
sphere=new Sphere(sphereMat,radius,segmentsW,segmentsH,initObject);
sphere.x=xPos;
sphere.y=yPos;
sphere.z=zPos;
return sphere;
}
//シリンダー
private function mkCylinder(xPos,yPos,zPos):DisplayObject3D{
var cylinderMat:MaterialObject3D = new WireframeMaterial();
var radius:Number =50; //半径
var h:Number =100; //高さ
var segmentsW:int =8; //横の分割数
var segmentsH:int =6; //縦の分割数
var topRadius:Number =-1; //上面の半径
var topFace:Boolean =true; //上面の表示/非表示
var bottomFace:Boolean =true; //下面の表示/非表示
var initObject:Object =null;
cylinder = new Cylinder(cylinderMat,radius,h,segmentsW,segmentsH,topRadius,topFace,bottomFace,initObject);
cylinder.x=xPos;
cylinder.y=yPos;
cylinder.z=zPos;
return cylinder;
}
//円錐
private function mkCone(xPos,yPos,zPos):DisplayObject3D{
var coneMat:MaterialObject3D = new WireframeMaterial();
var radius:Number =100;
var h:Number =100;
var segmentsW:int =8;
var segmentsH:int =6;
var initObject:Object =null;
cone = new Cone(coneMat,radius,h,segmentsW,segmentsH,initObject);
cone.x=xPos;
cone.y=yPos;
cone.z=zPos;
return cone;
}
//板
private function mkPlane(xPos,yPos,zPos):DisplayObject3D{
var planeMat:MaterialObject3D=new WireframeMaterial();
var w:Number=400;
var h:Number=400;
var segmentsW:Number=3;
var segmentsH:Number=2;
var initObject:Object=null;
plane = new Plane(planeMat,w,h,segmentsW,segmentsH,initObject);
plane.x=xPos;
plane.y=yPos;
plane.z=zPos;
return plane;
}
}
}
レンダリング時(表示時)にsceneとcameraとviewportを設定しないとダメみたい。たぶん。立方体だけぐるぐる回っています。
立方体のマテリアルは面ごとに設定しないとエラーになっちゃうみたい。
んで、これを新規で作ったflaファイルのプロパティのドキュメントクラスに「PV3D_Basic」と書いてパブリッシュすればおでんのできあがり。



