Flash GAMM Kyiv 2011. 10 декабряFlash GAMM Kyiv 2011. December, 10
AlternativaPhysics: физическая симуляция на Flash – это просто
AlternativaPhysics: physics simulation on Flash is easy
Дмитрий Сергеев, Программист, AlternativaPlatformDmitriy 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 scene
ОбъектыObjects
СобытияEvents
Солвер Solver
КонфигурацияConfiguration
Позиции, скоростиPositions, velocities
Столкновения, контактыCollisions, contacts
ОграниченияConstraints
ГеометрияGeometry
Определениестолкновений
Collisiondetection
СилыForces
История AlternativaPhysicsThe 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 materials
● elasticity (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● Optimization
● broad 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.<Body> = new Vector.<Body>(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
● Contact
● With 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 flagsBall 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 stageCannon Stage Demo
Спасибо за вниманиеThanks for your attention
пожалуйста, задавайте вопросы,
пишите на
please ask your questions,
feel free to contact me: