Рузанов Игорь. UAFPUG, 16.08.2008.. Введение Papervision3D – написанная на AS3 библиотека (движок) для работы с 3-х мерной графикой в Adobe Flash и Flex.

Презентация:



Advertisements
Похожие презентации
Электронная Россия ( ), ЭР-2004 Лекция # 2 Основы анимации на основе Flash-технологий.
Advertisements

Test 5 Вопрос 1. В результате компиляции каких строк будет происходить ошибка компиляции: public class Main { public static void main(String[] args) {
Test 17 Вопрос 1. public class TKO { public static void main(String[] args) { String s = "-"; Integer x = 343; long L343 = 343L; if (x.equals(L343)) s.
Test 9 Вопрос 1. public class A { private String runNow() { return "High"; } static class B extends A { public String runNow() { return "Low"; } } public.
Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Интерфейсы в Java. Интерфейсы Множественное наследование не допускается при помощи классов Допускается множественное наследование при помощи интерфейсов.
Защита от взлома Лекция 10Защита от взлома Лекция 10.
Sun Proprietary/Confidential: Internal Use Only 1 Developer/Community Campaign Александр Щербатый Язык JavaFX Script – разработка приложений.
Виталий Хить (well). Виджеты Примеры кода Собственное обучение.
Исключения в Java Макаревич Л. Г.. Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение.
DisplayList – завершение Работа с медиа Сетевое взаимодейтсвие Локальное хранение и передача данных FLASH PLATFORM – ОБЗОРНЫЙ КУРС. ЛЕКЦИЯ 3.
Test 16 Вопрос 1. class Clazz { { System.out.println("non-static init"); } public static void main(String a[]) { System.out.println("main"); Clazz ob1.
PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий.
QML – новый подход к построению GUI. Введение Подходы к построению десктопных приложений: Императивный Декларативный QML - это декларативный язык, предназначенный.
Test 13 Вопрос 1. public class StringTest { public static void main(String[] arg){ test(new String[] { null });} static void test(Object[] o){System.out.print(1);}
Функции с переменным числом аргументов private static int Sum(int a, int b) { return a + b; } static void Main() { int sum = Sum(1, 2); } 1 Функции.
1 A + B Операнд 1Операнд 2 Оператор Что такое выражение (expression) ? Что такое инструкция (statement) ? Операторы int max = (a > b) ? a : b;
Saint Petersburg, 2011 Java Lecture Generics. Quiz ArrayList lst = new ArrayList(); Collection c = lst; lst.add("one"); lst.add(two"); lst.add(three");
Максим Павловский
Test 8 Вопрос 1. class Class1 { Class1(int i) { System.out.println("Class1(int)"); } public class Class2 extends Class1 { Class2(double d) { // 1 this((int)
Транксрипт:

Рузанов Игорь. UAFPUG,

Введение Papervision3D – написанная на AS3 библиотека (движок) для работы с 3-х мерной графикой в Adobe Flash и Flex С открытым исходным кодом MIT лицензия

Установка Скачать из репозитория Svn (TortoiseSVN): Добавить файлы в classpath проекта Импортировать papervision классы в проект

Основные классы Viewport3D Scene3D Camera3D (or alternatives) BasicRenderEngine (or alternative)

package { import … ; public class Main extends Sprite{ private var viewport:Viewport3D; private var scene:Scene3D; private var camera:Camera3D; private var renderer:BasicRenderEngine; public function Main() { initPapervision3D(); } private function initPapervision3D():void { viewport = new Viewport3D(); addChild(viewport); scene = new Scene3D(); camera = new Camera3D(); renderer = new BasicRenderEngine(); renderer.renderScene(scene, camera, viewport); } } }

Viewport3D viewportWidth viewportHeight autoScaleToStage interactive autoClipping – объекты вне прямоугольника viewporta не будут рендерится autoCulling - будут рендерится только объекты, которые находятся перед камерой (треугольники спрятанные за другими треугольниками не будут отрендерены)

Camera3D FreeCamera3D FrustumCamera3D

BasicRenderEngine private var renderer:BasicRenderEngine = new BasicRenderEngine(); //обычно вызывается на Event.ENTER_FRAME renderer.renderScene(scene, camera, viewport);

3D координаты

3D объекты. Плоскость Plane(material:MaterialObject3D=null, width:Number=0, height:Number=0, segmentsW:Number=0, segmentsH:Number=0, initObject:Object=null)

3D объекты. Сфера Sphere(material:MaterialObject3D=null, radius:Number=100, segmentsW:int=8, segmentsH:int=6,initObject:Object=null)

3D объекты. Куб var materialsList:MaterialsList = new MaterialsList(); materialsList.addMaterial(frontMaterial, "front"); materialsList.addMaterial(backMaterial, "back"); materialsList.addMaterial(leftMaterial, "left"); materialsList.addMaterial(rightMaterial, "right"); materialsList.addMaterial(topMaterial, "top"); materialsList.addMaterial(bottomMaterial, "bottom"); var cube:Cube = new Cube(materialsList); scene.addChild(cube);

3D объекты. Куб var materialsList:MaterialsList = new MaterialsList(); var insideFaces:int = Cube.LEFT + Cube.RIGHT + Cube.BOTTOM; var cube:Material = new Cube(m, w, d, h, sS, sT, sH, insideFaces);

private function initPapervision3D():void { viewport = new Viewport3D(); viewport.interactive = true; viewport.autoScaleToStage = true; addChild(viewport); scene = new Scene3D(); camera = new Camera3D(); camera.z = 0; camera.focus = 20; renderer = new BasicRenderEngine(); } Инициализация Papervision3d

cube = new Cube(materials, CUBE_SIZE, CUBE_SIZE, CUBE_SIZE, CUBE_QUALITY, CUBE_QUALITY, CUBE_QUALITY, Cube.ALL, Cube.NONE); cube.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, mousePressHandler); cube.addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE, mouseReleaseHandler); cube.addEventListener(InteractiveScene3DEvent.OBJECT_DOUBLE_C LICK, mouseDoubleClickHandler); scene.addChild(cube); Инициализация куба

private function mousePressHandler(e:Event):void { state = UPDATING_STATE; } private function mouseReleaseHandler(e:Event):void { state = EASING_STATE; } Обработка событий мышки

removeEnterFrameListeners(); switch (value) { case UPDATING_STATE : stage.quality = StageQuality.LOW; addEventListener(Event.ENTER_FRAME, updateCamera); break; case EASING_STATE : stage.quality = StageQuality.LOW; addEventListener(Event.ENTER_FRAME, easeCamera); break; case NORMAL_STATE : stage.quality = StageQuality.HIGH; break; } Переключение между состояниями

private function createMaterial(url:String, sideName:String):MovieMaterial { var movie:CubeSide = new CubeSide(url); movie.addEventListener(Event.COMPLETE, bitmapLoaded); var material:MovieMaterial = new MovieMaterial(movie); material.smooth = true; material.interactive = true; material.animated = true; return material; } Создание материала (текстуры)

private function createArea():void { var rect:Rectangle = new Rectangle(area[0], area[1], area[2], area[3]); var bitmap:Bitmap = Bitmap(loader.contentLoaderInfo.content); var mc:Sprite = new Sprite(); mc.x = rect.x; mc.y = rect.y; mc.alpha = 0; mc.addChild(getHighlightedBitmap(bitmap, rect)); mc.addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver); mc.addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut); addChild(mc); } Добавление событий мышки для материала

Полезные ссылки

Спасибо за внимание Изображения для панорамы (с) MyDeco.comMyDeco.com