Flash GAMM Kyiv 2011. 10
Flash GAMM Kyiv 2011. December, 10
AlternativaPhysics: Flash
AlternativaPhysics: physics simulation on Flash is easy
, , AlternativaPlatform
Dmitriy Sergeev, Software Engineer, AlternativaPlatform
Plan
API
Introduction
Functionality review
API review
Engine demos
Goal
, :AlternativaPhysics
AlternativaPhysics
The goal is to show that:AlternativaPhysics is a powerful and universal engine
The usage of AlternativaPhysics is easy
?
What is the physics engine?
Physics engine Physics sceneObjectsEvents SolverConfiguration, Positions, velocities, Collisions, contactsConstraintsGeometryCollisiondetectionForces
AlternativaPhysics
The history of AlternativaPhysics
http://tankionline.com
Physics in the platform
AlternativaPlatform
Alternativa3D
AlternativaEditor
AlternativaGUI
AlternativaPhysics
AlternativaCore
Functionality
Solver
Geometry
Solver
Improved stability
Plausible simulation of elastic and resting contacts
Physic materialselasticity (restitution)
friction
. , .
Solver. Stacks and materials. Demo
.
Solver. Constraints
(ball-in-socket)
(hinge)
Max distance
Fixed distance
Ball-in-socket
Rotational (hinge)
. .
Solver. Constraints. Demo
.
Geometry. Primitives
(, )
(, , , , )
Flat primitives (triangle, square)
3D primitives (ball, box, cylinder, cone, frustum)
.
Geometry. Complex Objects
:
Arbitrary bodies:Convex polyhedron
Triangle mesh
Hierarchical container
.
Geometry demo
.
Geometry. Another Features
GJK/EPA
GJK/EPA algorithm
Optimizationbroad phase
static objects
Ray casts
Limitations on the Number of Objects
500
The number of objects up to 500 in case of a large amount of contacts
The number of primitives in static objects unlimited
API
Physics scene
Engine configuration
Event handling
.
Scene. Hierarchy of Objects
Scene
Body
Physical primitive
Material
Movability
Position
Velocity
Mass
Events
Non-physical object
Position
Events
Non-physical primitive
Non-physical primitive
.
Scene. Hierarchy of Objects
private function PhysicsTest() {physicsScene = PhysicsConfiguration.DEFAULT.getPhysicsScene();
var body:Body = new Body();var box:CollisionBox = new CollisionBox(new Vector3(1, 1, 1), CollisionType.DYNAMIC);body.addPhysicsPrimitive(new PhysicsPrimitive(box, 10, new PhysicsMaterial(0.5, 0.5)));
body.calculateInertiaTensor();physicsScene.add(body);
body.setVelocity(new Vector3(1, 0, 0));
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {while (physicsScene.time < getTimer())physicsScene.update(PHYSICS_STEP);
...
}
.
Scene. Constraints
var boxCount:int = 3;var boxes:Vector. = new Vector.(boxCount);
for (var i:int = 0; i < boxCount; i++) {boxes[i] = createBox(i);physicsScene.add(boxes[i]);
}
for (i = 0; i < boxCount - 1; i++) {var c:ImpulseConstraint = new HingeImpulseConstraint( boxes[i], boxes[i + 1], new Vector3(INTERVAL, 0, 0), Vector3.ZERO, new Vector3(0, 0, 1), new Vector3(0, 0, 1)))physicsScene.addConstraint(c);
}
c 3
3 cubes demo
Engine Configuration
Geometry configuration
Solver configuration
var physicsConfig:PhysicsConfiguration = new PhysicsConfiguration();
physicsConfig.geometryConfiguration = new GeometryConfiguration();
var solverConfig:ImpulseSolverConfiguration = ImpulseSolverConfiguration.DEFAULT.clone();solverConfig.contactIterations = 4;physicsConfig.solverConfiguration = solverConfig;
var physicsScene:PhysicsScene = physicsConfig.getPhysicsScene();
Events
(onBeforeUpdate)
(onAfterUpdate)
Before update
After update
ContactWith body
WIth primitive
Events
public class SimFlag extends SimObject {public function SimFlag(position:Position, onContact:Function) {...cylinder = new CollisionCylinder(r, 3, CollisionType.TRIGGER);cylinder.addEventListener(ContactEvent.OnContact, onContact, this);...
}...
}
public class BallDemo {public function BallDemo() {...add(new SimFlag(Position.createXYZ(-4, -4, 0), takeFlag));...
}
private function takeFlag(event:ContactEvent):void {...flag = (event.userData as SimFlag);flag.visible = false;
}...
}
Ball and flags
Ball and Flags Demo
In Development
(slider, hinge-2, )
(, )
(, )
Alternativa3D
New constraints (slider, hinge-2, universal joint)
Constraints' parameterization
New primitives (capsule, ellipsoid)
New events (enter contact, leave contact)
Stabilization improvement
Performance improvement
Intergration with Alternativa3D
Cannon stage
Cannon Stage Demo
Thanks for your attention
please ask your questions,feel free to contact me:[email protected]