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

Preview:

DESCRIPTION

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

Citation preview

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

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

пишите на

sergeev@alternativaplatform.com

please ask your questions,

feel free to contact me:

sergeev@alternativaplatform.com