papervision3D 2.X EX.07 Planeをバラバラに10個配置する - [k]id東京都世田谷区 ホームページ制作 [k]id

papervision3D 2.X EX.07 Planeをバラバラに10個配置する

Category Flash Tips,Papervision3Dを試す Update 2009.05.11

twitterfacebookgoogle+はてなブックマークPocketであとで読むfeedlyで購読

今度はPlaneをforのループでランダム位置にバラバラに10個配置して、
さらにパネルの色をランダムで指定してみました

具体的には


pMat.addMaterial(new ColorMaterial(Math.floor(Math.random() * 0xFFFFFF), 0.6));

で色をランダムで指定してます。

[embedSWF]http://kidokorock.com/wp-content/uploads/2009/05/plane_rand.swf[/embedSWF]
サンプル

ソースは↓です。

package {
import flash.display.Sprite;
import flash.events.Event;

//————————————————————
// クラス読み込み
import org.papervision3d.core.geom.Lines3D;
import org.papervision3d.core.geom.renderables.Line3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.materials.special.LineMaterial;

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;

//Plane オブジェクトのクラスを追加
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.materials.special.CompositeMaterial;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.ColorMaterial;

//クリックイベントを有効
import org.papervision3d.events.InteractiveScene3DEvent;
import caurina.transitions.Tweener;

[SWF(backgroundColor=”#ffffff”)];

public class Main extends Sprite {
//————————————————————
// 変数定義
private var lines3D:Lines3D;
private var viewport:Viewport3D;
private var scene:Scene3D;
private var camera:Camera3D;
private var renderer:BasicRenderEngine;
private var rootNode:DisplayObject3D;

public function Main() {
//————————————————————
// カメラ視点等の定義
viewport=new Viewport3D(0,0,true,true);
scene=new Scene3D ;
camera=new Camera3D ;
renderer=new BasicRenderEngine ;
rootNode=scene.addChild(new DisplayObject3D(“rootNode”));
//
addChild(viewport);
camera.zoom=1;
camera.focus=1000;
camera.x=200;
camera.y=200;
camera.target=DisplayObject3D.ZERO;
//————————————————————
// ラインを投影するための変数定義
//[X座標の線]
var X_line:Line3D;
var X_strV:Vertex3D;
var X_endV:Vertex3D;
var X_lineM:LineMaterial=new LineMaterial(0xFF0000,0.2);
//[Y座標の線]
var Y_line:Line3D;
var Y_strV:Vertex3D;
var Y_endV:Vertex3D;
var Y_lineM:LineMaterial=new LineMaterial(0x00FF00,0.2);
//[Z座標の線]
var Z_line:Line3D;
var Z_strV:Vertex3D;
var Z_endV:Vertex3D;
var Z_lineM:LineMaterial=new LineMaterial(0x0000FF,0.2);
//
lines3D=new Lines3D ;
scene.addChild(lines3D);
//
//————————————————————
// X座標の線
X_strV=new Vertex3D(-1000,0,0);
X_endV=new Vertex3D(1000,0,0);
X_line=new Line3D(lines3D,X_lineM,2,X_strV,X_endV);
lines3D.addLine(X_line);
//————————————————————
// Y座標の線
Y_strV=new Vertex3D(0,-1000,0);
Y_endV=new Vertex3D(0,1000,0);
Y_line=new Line3D(lines3D,Y_lineM,2,Y_strV,Y_endV);
lines3D.addLine(Y_line);
//————————————————————
// Z座標の線
Z_strV=new Vertex3D(0,0,-1000);
Z_endV=new Vertex3D(0,0,1000);
Z_line=new Line3D(lines3D,Z_lineM,2,Z_strV,Z_endV);
lines3D.addLine(Z_line);

//————————————————————
// Plane オブジェクトを追加

for (var i:int=0; i < 10; i++) { //↓pMatというマテリアルを定義(マテリアルはテクスチャみたいなもんかな) var pMat:CompositeMaterial = new CompositeMaterial(); //↓pMatにワイヤーフレームの要素を追加 pMat.addMaterial(new WireframeMaterial(0xcccccc, 0.6)); //↓pMatに色の要素を追加 pMat.addMaterial(new ColorMaterial(Math.floor(Math.random() * 0xFFFFFF), 0.6)); //↓pMatに裏面に色をつける pMat.doubleSided = true; //マテリアルに対してクリックイベントを有効にするためにinteractiveをtrueに pMat.interactive=true; //↓新たにplaneBという名前でplaneを定義して new Plane(pMat, 100, 100, 6, 6); //new Plane(マテリアルを設定 , 縦 , 横 , 横の分解数, 縦の分解数) //という感じでPlaneを設定 var planeA:Plane = new Plane(pMat, 10, 10, 6, 6); planeA.x = Math.random()*100-50; planeA.y = Math.random()*100-50; planeA.z = Math.random()*100-50; planeA.rotationX = Math.random()*360; planeA.rotationY = Math.random()*360; //ここでlines3Dに追加する lines3D.addChild(planeA); //クリックイベントを追加 planeA.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClickHandler); } addEventListener(Event.ENTER_FRAME,onFrame); } public function onFrame(e:Event):void { //------------------------------------------------------------ // マウスの座標でZ軸を基点に回転 lines3D.yaw((mouseX - (stage.stageWidth / 2)) / (stage.width / 2) * 5); renderer.renderScene(scene,camera,viewport); } private function onClickHandler(e:Event) { var target :DisplayObject3D = new DisplayObject3D(); var planeA:Plane=Plane(e.target); var obj:DisplayObject3D=camera.target; obj.x = planeA.x; obj.y = planeA.y; obj.z = planeA.z; target.copyTransform( e.currentTarget ); target.moveBackward(-100); Tweener.addTween( camera, { x:target.x, y:target.y, z:target.z, rotationX:e.currentTarget.rotationX, rotationY:e.currentTarget.rotationY, rotationZ:e.currentTarget.rotationZ, time:5, transition:"easeInOut" } ); } } } [/code]

ページトップへ