SlideShare a Scribd company logo
Рузанов Игорь . UAFPUG, 16.08.2008.
Введение Papervision3D  – написанная на  AS3  библиотека (движок) для работы с 3-х мерной графикой в  Adobe Flash  и  Flex С открытым исходным кодом  MIT  лицензия
Установка Скачать из репозитория  Svn (TortoiseSVN ) :   http://papervision3d.googlecode.com/svn/trunk/branches/GreatWhite/src Добавить файлы в  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 –  объекты вне прямоугольника  viewport’a  не будут рендерится  autoCulling  - будут рендерится только объекты, которые находятся перед камерой (треугольники спрятанные за другими треугольниками не будут отрендерены)
Camera3D Camera3D FreeCamera3D FrustumCamera3D
BasicRenderEngine private var renderer:BasicRenderEngine = new BasicRenderEngine(); // обычно вызывается  на  Event.ENTER_FRAME renderer.renderScene(scene, camera, viewport);
3 D  координаты
3 D  объекты. Плоскость Plane(material:MaterialObject3D=null, width:Number=0,   height:Number=0,   segmentsW:Number=0,   segmentsH:Number=0,  initObject:Object=null)
3 D  объекты. Сфера Sphere(material:MaterialObject3D=null, radius:Number=100, segmentsW:int=8, segmentsH:int=6,initObject:Object=null)
3 D  объекты. Куб 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);
3 D  объекты. Куб 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_CLICK, 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); } Добавление событий мышки   для материала
Полезные ссылки http://blog.papervision3d.org/ http://pv3d.org/ http://papervision2.com/ http://blog.zupko.info/ http://mrdoob.com/blog/
Спасибо за внимание Изображения для панорамы (с)   MyDeco.com

More Related Content

PDF
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
PDF
Вадим Макеев
PDF
iOS-05_2-UIKit
PDF
msumobi2. Лекция 2
PPTX
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
PPTX
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
PPTX
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
PDF
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
Вадим Макеев
iOS-05_2-UIKit
msumobi2. Лекция 2
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...

What's hot (20)

PDF
Что API Карт забыл на сервере — Антон Корзунов
PDF
Flink CEP и немного магии...
PDF
5.1 Перегрузка операторов
PPTX
Ecma script 6 yevhen diachenko
PDF
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
PDF
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
PPTX
DSLs in Lisp and Clojure
PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
PDF
C++ exceptions
PPTX
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
PPTX
Выявление ошибок и потенциальных уязвимостей в C и C++ коде с помощью анализа...
PDF
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
PPTX
C++ осень 2012 лекция 11
PPT
Array Work C
PPTX
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
PDF
JS Fest 2019. Владимир Агафонкин. Быстро по умолчанию: алгоритмическое мышлен...
PPTX
Node.js and C++ #foss-sea.org.ua
PPTX
Аскетичная разработка браузера
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
Что API Карт забыл на сервере — Антон Корзунов
Flink CEP и немного магии...
5.1 Перегрузка операторов
Ecma script 6 yevhen diachenko
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
DSLs in Lisp and Clojure
Интуит. Разработка приложений для iOS. Лекция 3. Views
C++ exceptions
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Выявление ошибок и потенциальных уязвимостей в C и C++ коде с помощью анализа...
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
C++ осень 2012 лекция 11
Array Work C
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
JS Fest 2019. Владимир Агафонкин. Быстро по умолчанию: алгоритмическое мышлен...
Node.js and C++ #foss-sea.org.ua
Аскетичная разработка браузера
DevConf. Дмитрий Сошников - ECMAScript 6
Ad

Viewers also liked (9)

PPT
Ed Present Nov 09 Esyne
PPT
Pointers in c
PPT
Main Menu
PPT
Money Show 2009
PPT
Cobit
PPT
Green Evolution Profile 1
PPT
εκε Green Evolution 2
PPTX
Bluevibe@Fsc1
PPT
Dimitris_Tsigos_ISTAME_20110228
Ed Present Nov 09 Esyne
Pointers in c
Main Menu
Money Show 2009
Cobit
Green Evolution Profile 1
εκε Green Evolution 2
Bluevibe@Fsc1
Dimitris_Tsigos_ISTAME_20110228
Ad

Similar to Знакомство с Papervision3d (20)

PDF
"Погружение в Robolectric" Дмитрий Костырев (Avito)
PDF
Введиние в разработку 3D игр для Nokia Asha телефонов
PDF
Андрей Юткин. Media Picker — to infinity and beyond
PDF
Максим Хромцов "Yandex MapKit для Android OS в примерах"
PDF
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
PPTX
Паттерны проектирования
PDF
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
PDF
ES2015+: давно пора!
PPT
Где кончается react native? / Павел Кондратенко (Rambler&Co)
PDF
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
PDF
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
PPTX
Статический анализ кода: Что? Как? Зачем?
PPTX
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
PPT
20111204 computer graphics_galinsky_lecture12_real_time
PPTX
PDF
Экскурсия по Flutter SDK
PDF
RxJava+RxAndroid (Lecture 20 – rx java)
PPT
Всеволод Шмыров, Яндекс
PPTX
DirectX12 Graphics and Performance
PPTX
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
Введиние в разработку 3D игр для Nokia Asha телефонов
Андрей Юткин. Media Picker — to infinity and beyond
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Паттерны проектирования
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
ES2015+: давно пора!
Где кончается react native? / Павел Кондратенко (Rambler&Co)
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
Статический анализ кода: Что? Как? Зачем?
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
20111204 computer graphics_galinsky_lecture12_real_time
Экскурсия по Flutter SDK
RxJava+RxAndroid (Lecture 20 – rx java)
Всеволод Шмыров, Яндекс
DirectX12 Graphics and Performance
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)

Знакомство с Papervision3d

  • 1. Рузанов Игорь . UAFPUG, 16.08.2008.
  • 2. Введение Papervision3D – написанная на AS3 библиотека (движок) для работы с 3-х мерной графикой в Adobe Flash и Flex С открытым исходным кодом MIT лицензия
  • 3. Установка Скачать из репозитория Svn (TortoiseSVN ) : http://papervision3d.googlecode.com/svn/trunk/branches/GreatWhite/src Добавить файлы в classpath проекта Импортировать papervision классы в проект
  • 4. Основные классы Viewport3D Scene3D Camera3D (or alternatives) BasicRenderEngine (or alternative)
  • 5. 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);         }    } }
  • 6. Viewport3D viewportWidth viewportHeight autoScaleToStage interactive autoClipping – объекты вне прямоугольника viewport’a не будут рендерится autoCulling - будут рендерится только объекты, которые находятся перед камерой (треугольники спрятанные за другими треугольниками не будут отрендерены)
  • 8. BasicRenderEngine private var renderer:BasicRenderEngine = new BasicRenderEngine(); // обычно вызывается на Event.ENTER_FRAME renderer.renderScene(scene, camera, viewport);
  • 9. 3 D координаты
  • 10. 3 D объекты. Плоскость Plane(material:MaterialObject3D=null, width:Number=0, height:Number=0, segmentsW:Number=0, segmentsH:Number=0, initObject:Object=null)
  • 11. 3 D объекты. Сфера Sphere(material:MaterialObject3D=null, radius:Number=100, segmentsW:int=8, segmentsH:int=6,initObject:Object=null)
  • 12. 3 D объекты. Куб 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);
  • 13. 3 D объекты. Куб 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);
  • 14. 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
  • 15. 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_CLICK, mouseDoubleClickHandler); scene.addChild(cube); Инициализация куба
  • 16. private function mousePressHandler(e:Event):void { state = UPDATING_STATE; } private function mouseReleaseHandler(e:Event):void { state = EASING_STATE; } Обработка событий мышки
  • 17. 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; } Переключение между состояниями
  • 18. 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; } Создание материала (текстуры)
  • 19. 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); } Добавление событий мышки для материала
  • 20. Полезные ссылки http://blog.papervision3d.org/ http://pv3d.org/ http://papervision2.com/ http://blog.zupko.info/ http://mrdoob.com/blog/
  • 21. Спасибо за внимание Изображения для панорамы (с) MyDeco.com