четверг, 28 июля 2011 г.

Основы PaperVision3D. Первое знакомство

Привет всем, с вами noTformaT и это серия статей по основам PaperVision3D. В этой статье мы с вами рассмотрим, что такое PaperVision3D, как его установить, и основные элементы этого пакета.Начнем с того что такое «PaperVision3D». «PaperVision3D» – это библиотека для отображения 3D элементов во Flash. «PaperVision3D» позволяет загружать на сцену уже готовые 3D элементы, создавать свои 3D элементы, создавать различные материалы для этих элементов, управлять камерой, создавать различные 3D эффекты. «PaperVision3D» – это бесплатная библиотека, так что использовать ее можно как угодно и где угодно, так же можно вводить свой код в эту библиотеку. Ну, а теперь о том, как получить эту библиотеку, и как ее установить. Находится она на сайте http://code.google.com/p/papervision3d/, поэтому давайте зайдем на этот сайт и посмотрим, что там есть. Из всех вкладок нам нужна только вкладка Downloads. В этой вкладке есть список всех релизов PaperVision3D. Нам потребуется релиз Papervision3D_2.1.932.zip.
Давайте загрузим его. Это простой zip архив, в котором собранны все классы библиотеки. После загрузки давайте разархивируем этот архив. В архиве мы видим всего одну папку «src», в этой папке есть две папки «nochump» и «org». Нам понадобится именно папка «org», именно в ней хранятся все пакеты, которые нам нужны для работы с «PaperVision3D».
Как всегда, в любом знакомстве с чем-то мы пишем простой «HelloWorld», так что давайте напишем и свой «HelloWorld». Вот пример того что мы сделаем. Будем писать в программе «FlashDevelop» версии 3, скачать его можно с официального сайта. После установки «FlashDevelop», запускаем его. Для начала надо создать проект, поэтому идем в меню «Project» и выбираем «New Project…».
В окне создания нового проекта «New Project», выберем «As3 Project», далее укажем имя проекта «HelloWorld» в поле «Name». Так же укажем расположение папки с проектом, поле «Location», например я указал следующий путь «D:\pv3d_tut\tut_1», и вот пример того, как я заполнил это окно.
Далее просто нажимаем кнопку «ОК». После этого в панели «Project» ,будет видна полная структура нашего проекта. Щелкнем по названию нашего проекта правой кнопкой мыши в этой панели, и выберем пункт «Properties».
Откроется окно настройки проекта, в этом окне нам понадобится вкладка «ClassPath», в этой вкладке нажимаем на кнопку «Add ClassPath…» и выбираем в открытом окне выбора папки, папку «src» загруженной и разархивированной библиотеке. В моем случае это выглядит так:
Далее просто жмем на кнопку «Ok» и видим что в панели «Project» появился пункт с нашей библиотекой.
Все приготовления готовы, поэтому можем приступать к написанию кода, открываем в панели «Project» файл «Main.as», который находится в папке «src» проекта.
И в окне редактора кода, изменяем код этого файла, на этот код:
package   
{ 
 import flash.display.Sprite; 
 import flash.events.Event; 
 import org.papervision3d.cameras.Camera3D; 
 import org.papervision3d.objects.primitives.Sphere; 
 import org.papervision3d.render.BasicRenderEngine; 
 import org.papervision3d.scenes.Scene3D; 
 import org.papervision3d.view.Viewport3D; 
    
 /** 
 * ... 
 * @author noTformaT 
 */ 
 public class Main extends Sprite   
 { 
 private var _scene:Scene3D = null; 
 private var _viewPort:Viewport3D = null; 
 private var _camera:Camera3D = null; 
 private var _renderEngine:BasicRenderEngine = null; 
 private var _primitiv:Sphere = null; 
    
    
 public function Main():void   
 { 
  if (stage) init(); 
  else addEventListener(Event.ADDED_TO_STAGE, init); 
 } 
    
 private function init(e:Event = null):void   
 { 
  removeEventListener(Event.ADDED_TO_STAGE, init); 
  // entry point 
  _scene = new Scene3D(); 
  _camera = new Camera3D(); 
  _primitiv = new Sphere(); 
  _scene.addChild(_primitiv); 
  _viewPort = new Viewport3D(800, 600); 
  addChild(_viewPort); 
  _renderEngine = new BasicRenderEngine(); 
  addEventListener(Event.ENTER_FRAME, OnEnterFrameBehaviour); 
 } 
    
 private function OnEnterFrameBehaviour(e:Event):void 
 { 
  _primitiv.rotationX ++; 
  _primitiv.rotationZ ++; 
  _renderEngine.renderScene(_scene, _camera, _viewPort); 
 } 
  } 
}
После переписания кода, запускаем нашу программу через «Project» -> «Test Movie».
После компиляции запустится FlashPlayer, в нем будет крутиться обычная сфера, сейчас она без материала. Вот это и есть самый простой «HelloWorld». Все строчки кода мы рассмотрим в следующей статье, а сейчас рассмотрим, из каких элементов состоит сама библиотека «PaperVision3D». 
«PaperVision3D» состоит из шести базовых элементов: 
  • Scene 
  • Camera 
  • ViewPort 
  • 3D Object 
  • Material 
  • RenderEngine 
Давайте рассмотрим каждый из них. 
Scene – это 3D пространство в котором размещаются все объекты, что бы объект был видим его надо добавить на сцену. Думайте о сцене как о комнате. 
Camera – камера, это камера, по сути камера это ваш глаз, камера визуализирует все объекты сцены которые попадают в зону действия камеры. Так же с помощью камеры можно использовать zoom и фокус. 
ViewPort – все что видит камера должно быть визуализировано, ViewPort используется как обычная плоскость, на которую будет визуализироваться все что видит камера. 
3D Object – все объекты, которые находятся на сцене считаются 3D объектами, будь то стол, или книга, или обычный шар (как в нашем примере). 
Material – часто материал это текстура 3D объекта. Материал может быть сеточным – отображает сетку 3D объекта, а быть и текстурой. Также можно использовать материалы цвета, в этом случае ваша модель будет полностью окрашена в выбранный цвет. С помощью материалов можно использовать различные системы затенения и освещения. Материалы тесно связаны с 3D объектами. Любой 3D объект должен иметь свой материал. 
RenderEngine – это самый главный элемент в библиотеке. Он используется для визуализации сцены. Для его работы нужна Scene(сцена которую будем визуализировать), Camera (для того чтобы знать что визуализировать), и ViewPort (куда будем визуализировать).
Как видно все очень просто. Даже очень. Ну, а теперь напоследок, рассмотрим пакеты, из которых состоит «PaperVision3D». Все пакеты «PaperVision3D» находятся в пакете «org.papervision3d» папки «src», всего их 11, далее дам краткое описание каждого из них. 
  • cameras – пакет содержит различные классы камер (точечная камера, камера которая двигается за объектом, камера которая следит за объектом, отладочная камера – выводит информацию о сцене) 
  • core – самый главный пакет, содержит в себе все классы для вычисления в 3D пространстве
  • events – содержит в себе классы событий (навели на объект, загрузили объект, удалили объект) 
  • lights – содержит в себе классы для работы со светом 
  • materials – пакет содержит различные материалы, как уже готовые, так и те, которые можно расширить для создания уникальных материалов 
  • objects – в данном пакете находятся классы для работы с 3д объектами, как уже готовыми (примитивы), так и созданными в ручную. 
  • render – содержит классы для визуализации объектов 
  • scenes – пакет содержит класс сцены 
  • typography – пакет содержит классы для работы с шрифтами 
  • utils – содержит утилитные классы 
  • view – пакет содержит классы для отображения сцены во Flash. 
Вот как бы и все. В этом «введении» мы рассмотрели структуру библиотеки «PaperVision3D». В следующей статье мы с вами напишем скелет, который будем использовать в следующих статьях, и разберем каждую строчку этого скелета. 
Все, всем удачи, с вами был noTformaT.