29
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

Alternativa Platform: Flash-игры: переходим в третье измерение

Embed Size (px)

DESCRIPTION

Мастер-класс будет интересен разработчикам 2D-flash-игр – как программистам, так и художникам. За час мы попытаемся перевести социальную игру в третье измерение – сделаем прототип 3D-flash-игры. На своем примере художник-иллюстратор Павел Горбунов расскажет о собственном опыте работы с 3D-графикой под Flash, а программист Alternativa3D Андрей Копысов продемонстрирует технические приемы, создав программную “обвязку”.

Citation preview

Page 1: Alternativa Platform: Flash-игры: переходим в третье измерение

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

Page 2: Alternativa Platform: Flash-игры: переходим в третье измерение

План докладаPlan

● Введение

● Обзор функциональности

● Обзор API

● Демо движка

● Introduction

● Functionality review

● API review

● Engine demos

Page 3: Alternativa Platform: Flash-игры: переходим в третье измерение

Цель докладаGoal

Показать, что:

● AlternativaPhysics – это мощный и универсальный движок

● Использовать AlternativaPhysics просто

The goal is to show that:

● AlternativaPhysics is a powerful and universal engine

● The usage of AlternativaPhysics is easy

Page 4: Alternativa Platform: Flash-игры: переходим в третье измерение

Что такое физический движок?What is the physics engine?

Физический движок Physics engine

Физическая сцена Physics scene

ОбъектыObjects

СобытияEvents

Солвер Solver

КонфигурацияConfiguration

Позиции, скоростиPositions, velocities

Столкновения, контактыCollisions, contacts

ОграниченияConstraints

ГеометрияGeometry

Определениестолкновений

Collisiondetection

СилыForces

Page 5: Alternativa Platform: Flash-игры: переходим в третье измерение

История AlternativaPhysicsThe history of AlternativaPhysics

http://tankionline.com

Page 6: Alternativa Platform: Flash-игры: переходим в третье измерение

Место физики в платформеPhysics in the platform

AlternativaPlatform

Alternativa3D

AlternativaEditor

AlternativaGUI

AlternativaPhysics

AlternativaCore

Page 7: Alternativa Platform: Flash-игры: переходим в третье измерение
Page 8: Alternativa Platform: Flash-игры: переходим в третье измерение

ФункциональностьFunctionality

● Солвер● Геометрия

● Solver● Geometry

Page 9: Alternativa Platform: Flash-игры: переходим в третье измерение

СолверSolver

● Улучшенная стабильность

● Реалистичная симуляция упругих и неупругих контактов

● Физический материал

● упругость● трение

● Improved stability

● Plausible simulation of elastic and resting contacts

● Physic materials

● elasticity (restitution)● friction

Page 10: Alternativa Platform: Flash-игры: переходим в третье измерение

Солвер. Стеки, материалы. ДемоSolver. Stacks and materials. Demo

Page 11: Alternativa Platform: Flash-игры: переходим в третье измерение

Солвер. ОграниченияSolver. Constraints

● Максимальное расстояние

● Фиксированное расстояние

● Шаровое соединение (ball-in-socket)

● Вращательное (hinge)

● Max distance

● Fixed distance

● Ball-in-socket

● Rotational (hinge)

Page 12: Alternativa Platform: Flash-игры: переходим в третье измерение

Солвер. Ограничения. ДемоSolver. Constraints. Demo

Page 13: Alternativa Platform: Flash-игры: переходим в третье измерение

Геометрия. ПримитивыGeometry. Primitives

● Плоские примитивы (треугольник, квадрат)

● Объемные примитивы (шар, бокс, цилиндр, конус, усеченный конус)

● Flat primitives (triangle, square)

● 3D primitives (ball, box, cylinder, cone, frustum)

Page 14: Alternativa Platform: Flash-игры: переходим в третье измерение

Геометрия. Сложные объектыGeometry. Complex Objects

Произвольные тела:

● Выпуклый многогранник

● Треугольный меш

● Иерархический контейнер

Arbitrary bodies:

● Convex polyhedron

● Triangle mesh

● Hierarchical container

Page 15: Alternativa Platform: Flash-игры: переходим в третье измерение

Геометрия. ДемоGeometry demo

Page 16: Alternativa Platform: Flash-игры: переходим в третье измерение

Геометрия. Другие особенностиGeometry. Another Features

● Алгоритм GJK/EPA● Оптимизации

● широкая фаза● статические объекты

● Пересечение с лучом

● GJK/EPA algorithm● Optimization

● broad phase● static objects

● Ray casts

Page 17: Alternativa Platform: Flash-игры: переходим в третье измерение

Ограничения на число объектов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

Page 18: Alternativa Platform: Flash-игры: переходим в третье измерение

API

● Сцена● Конфигурация

движка● Обработка событий

● Physics scene● Engine configuration● Event handling

Page 19: Alternativa Platform: Flash-игры: переходим в третье измерение

Сцена. Иерархия объектов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

Page 20: Alternativa Platform: Flash-игры: переходим в третье измерение

Сцена. Иерархия объектов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);...

}

Page 21: Alternativa Platform: Flash-игры: переходим в третье измерение

Сцена. Ограничения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);

}

Page 22: Alternativa Platform: Flash-игры: переходим в третье измерение

Демо c 3 кубами3 cubes demo

Page 23: Alternativa Platform: Flash-игры: переходим в третье измерение

Конфигурация движка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();

Page 24: Alternativa Platform: Flash-игры: переходим в третье измерение

СобытияEvents

● Предобработка сцены (onBeforeUpdate)

● Постобработка сцены (onAfterUpdate)

● Возникновение контакта

● С телом● С примитивом

● Before update

● After update

● Contact

● With body● WIth primitive

Page 25: Alternativa Platform: Flash-игры: переходим в третье измерение

События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;

}...

}

Page 26: Alternativa Platform: Flash-игры: переходим в третье измерение

Демо Ball and flagsBall and Flags Demo

Page 27: Alternativa Platform: Flash-игры: переходим в третье измерение

В разработке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

Page 28: Alternativa Platform: Flash-игры: переходим в третье измерение

Демо Cannon stageCannon Stage Demo

Page 29: Alternativa Platform: Flash-игры: переходим в третье измерение

Спасибо за вниманиеThanks for your attention

пожалуйста, задавайте вопросы,

пишите на

[email protected]

please ask your questions,

feel free to contact me:

[email protected]