forked from: Flickr Tricks For Aurora Crowley!!
particle
メインクラス
/**
* Copyright hacker_kq4j82_e ( http://wonderfl.net/user/hacker_kq4j82_e )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/qZXb
*/
package {
import flash.display.*;
import flash.events.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.*;
import org.papervision3d.scenes.*;
import org.papervision3d.view.*;
import org.papervision3d.objects.parsers.DAE;
//particle
import org.papervision3d.objects.special.ParticleField;
import org.papervision3d.materials.special.ParticleMaterial;
[SWF(
backgroundColor="0x000000",
frameRate="45"
)]
//メインクラス
public class Hyakkin extends Sprite {
private var scene:Scene3D;
private var camera:Camera3D;
private var viewport:Viewport3D;
private var renderer:BasicRenderEngine;
private var particleMat:ParticleMaterial;
private var particles:ParticleField;
private var world:BasicView;
private var material:WireframeMaterial;
private var sphere:Sphere;
private var plane:PaperPlane;
private var testObj:DAE;
private var isMouseDown:Boolean;
private var oldX:Number=0;
private var oldY:Number=0;
private var targetRotX:Number=0;
private var targetRotY:Number=0;
private var rotX:Number=0;
private var rotY:Number=0;
public function Hyakkin() {
//シーン(3D空間)の生成
scene=new Scene3D ;
//カメラの生成
camera=new Camera3D ;
//カメラの設定
camera.x=camera.y=0;
camera.z=-100;
camera.focus=100;//focus×zoom分、オブジェクトから離れている場合
camera.zoom=10;//画面に同じ大きさで描画される
//ビューポートの生成
viewport=new Viewport3D(600,400);
//画面にビューポートを追加
this.addChild(viewport);
//描画エンジンの生成
renderer=new BasicRenderEngine;
//ワイヤー
material=new WireframeMaterial;
sphere=new Sphere(material,10,10,10);
scene.addChild(sphere);
//パーティクル
particleMat=new ParticleMaterial(0xFFFFFF,1);
particles=new ParticleField(particleMat,500,4,2000,2000,2000);
scene.addChild(particles);
// DAE
testObj=new DAE(true,null,true);
testObj.load('baloon2.dae');
testObj.scale=100;
testObj.x=100;
testObj.y=-300;
scene.addChild(testObj);
//毎フレームの描画処理メソッドを登録
stage.addEventListener(Event.ENTER_FRAME,drawPapervision3d);
//マウスイベント登録
stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, upHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
}
//毎フレームの描画
private function drawPapervision3d(e:Event):void {
rotX += (targetRotX - rotX) * 0.05
rotY += (targetRotY - rotY) * 0.05
sphere.rotationY +=1;
// カメラの位置を変える
var rateX:Number = mouseX / stage.stageWidth;
camera.rotationY = -100 * (rateX - 0.5);
camera.x = -100 * (rateX - 0.5);
var rateY:Number = mouseY / stage.stageHeight;
camera.rotationX = 100 * (rateY - 0.5);
camera.y = 100 * (rateY - 0.5);
//cameraから見たsceneをviewportに描画
renderer.renderScene(scene,camera,viewport);
}
private function downHandler(e:Event):void {
isMouseDown=true;
oldX=mouseX;
oldY=mouseY;
}
private function upHandler(e:Event):void {
isMouseDown=false;
}
private function moveHandler(e:Event):void {
if (isMouseDown) {
var dy:Number=stage.stageWidth-oldX;
var dx:Number=stage.stageHeight-oldY;
targetRotX+=dy*0.25;
targetRotY+=dx*0.25;
oldX = stage.stageWidth;
oldY = stage.stageHeight;
}
}
}
}