View
1.610
Download
5
Category
Preview:
Citation preview
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
, , sergeev@alternativaplatform.com
please ask your questions,feel free to contact me:sergeev@alternativaplatform.com
Recommended