“alternativaphysics: физическая симуляция на flash – это просто”...

Download “AlternativaPhysics: физическая симуляция на Flash – это просто” (Дмитрий Сергеев, AlternativaPlatform)

If you can't read please download the document

Upload: devgamm-conference

Post on 16-Apr-2017

1.606 views

Category:

Documents


5 download

TRANSCRIPT

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

, , [email protected]

please ask your questions,feel free to contact me:[email protected]