Title: Simple Wow Engine Demo
Very simple Wow Demo example using BasicView [update: added cube + fps] - revision 694 - uses Wow Physics Engine SVN and also some ideas from here
Actionscript:
-
/**
-
* v0.3 code by dehash.com 2008
-
* Released as open source under the BSD License
-
* http://www.opensource.org/licenses/bsd-license.php
-
*/
-
package com.dehash.pv3d.examples.physics {
-
import org.papervision3d.materials.WireframeMaterial;
-
import org.papervision3d.materials.utils.MaterialsList;
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Sphere;
-
import org.papervision3d.objects.primitives.Cube;
-
import org.papervision3d.view.BasicView;
-
-
import fr.seraf.wow.primitive.WSphere;
-
import fr.seraf.wow.core.WOWEngine;
-
import fr.seraf.wow.primitive.WBoundArea;
-
import fr.seraf.wow.core.data.WVector;
-
-
import org.papervision3d.view.stats.StatsView;
-
-
import flash.events.Event;
-
-
[SWF(width="800", height="600", backgroundColor="0x000000")]
-
-
public class WowDemo extends BasicView {
-
private var wow:WOWEngine;
-
private var wowObjects:Array;
-
private var pv3DObjects:Array;
-
private var world:DisplayObject3D;
-
-
public function WowDemo(viewportWidth:Number = 800, viewportHeight:Number = 600,
-
scaleToStage:Boolean=true, interactive:Boolean=false, cameraType:String="CAMERA3D")
-
{
-
super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
-
-
var stats:StatsView = new StatsView(renderer);
-
stage.addChild(stats);
-
-
-
world = new DisplayObject3D();
-
-
pv3DObjects = new Array();
-
-
for(var i:uint = 0; i <5; i++){
-
var sphere:Sphere = new Sphere();
-
world.addChild(sphere);
-
pv3DObjects.push(sphere);
-
}
-
scene.addChild(world);
-
camera.target = world;
-
camera.zoom = 50;
-
-
wow= new WOWEngine(0.5);
-
wow.collisionResponseMode = wow.STANDARD;
-
var bound:WBoundArea = new WBoundArea(800,600,600);
-
bound.setPosition(0, 0, 0);
-
wow.setBoundArea(bound);
-
-
wowObjects = new Array();
-
-
for (var i:uint = 0; i <5; i++){
-
var wSphere:WSphere = new WSphere(0, 0, 0, 5, false, 0.005, 0.9, 0.01);
-
wSphere.px = rand(100, 50);
-
wSphere.py = rand(100, 50);
-
wSphere.pz = rand(100, 50);
-
wow.addParticle(wSphere);
-
wSphere.addForce( new WVector( rand(1,4), rand(1,4), rand(1,4) ) ) ;
-
wowObjects.push(wSphere);
-
}
-
-
var materialsList:MaterialsList = new MaterialsList();
-
materialsList.addMaterial(new WireframeMaterial(0x333333), "all");
-
scene.addChild(new Cube(materialsList, 1000, 800, 800));
-
-
startRendering();
-
}
-
-
protected override function onRenderTick(event:Event = null):void {
-
var rotY: Number = (mouseY-(stage.stageHeight/2))/(stage.height/2)*(1600);
-
var rotX: Number = (mouseX-(stage.stageWidth/2))/(stage.width/2)*(-1600);
-
camera.x= camera.x+(rotX-camera.x)/5;
-
camera.y = camera.y + (rotY - camera.y) / 5;
-
-
wow.step();
-
for(var i:uint = 0; i <pv3DObjects.length; i++) {
-
pv3DObjects[i].x = wowObjects[i].px
-
pv3DObjects[i].y = wowObjects[i].py
-
pv3DObjects[i].z = wowObjects[i].pz
-
}
-
renderer.renderScene(scene, camera, viewport)
-
}
-
-
private function rand(max:Number, min:Number):Number {
-
return Math.random()*(max-min) + min;
-
}
-
-
}
-
}