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

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

  • Upload
    r00z

  • View
    1.931

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Знакомство с Papervision3d

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

UAFPUG, 16.08.2008.

Page 2: Знакомство с Papervision3d

Введение

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

С открытым исходным кодом MIT лицензия

Page 3: Знакомство с Papervision3d

Установка

Скачать из репозитория Svn (TortoiseSVN): http://papervision3d.googlecode.com/svn/trunk/branches/GreatWhite/src

Добавить файлы в classpath проекта Импортировать papervision классы в проект

Page 4: Знакомство с Papervision3d

Основные классы

Viewport3D Scene3D Camera3D (or alternatives) BasicRenderEngine (or alternative)

Page 5: Знакомство с Papervision3d

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);        }   }}

Page 6: Знакомство с Papervision3d

Viewport3D viewportWidth viewportHeight autoScaleToStage interactive autoClipping – объекты вне прямоугольника

viewport’a не будут рендерится autoCulling - будут рендерится только объекты,

которые находятся перед камерой (треугольники спрятанные за другими треугольниками не будут отрендерены)

Page 7: Знакомство с Papervision3d

Camera3D

Camera3D FreeCamera3D FrustumCamera3D

Page 8: Знакомство с Papervision3d

BasicRenderEngineprivate var renderer:BasicRenderEngine = new

BasicRenderEngine();

//обычно вызывается на Event.ENTER_FRAME

renderer.renderScene(scene, camera, viewport);

Page 9: Знакомство с Papervision3d

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

Page 10: Знакомство с Papervision3d

3D объекты. Плоскость

Plane(material:MaterialObject3D=null, width:Number=0, height:Number=0, segmentsW:Number=0, segmentsH:Number=0,

initObject:Object=null)

Page 11: Знакомство с Papervision3d

3D объекты. Сфера

Sphere(material:MaterialObject3D=null, radius:Number=100, segmentsW:int=8, segmentsH:int=6,initObject:Object=null)

Page 12: Знакомство с Papervision3d

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);

Page 13: Знакомство с Papervision3d

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);

Page 14: Знакомство с Papervision3d

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

Page 15: Знакомство с 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);

Инициализация куба

Page 16: Знакомство с Papervision3d

private function mousePressHandler(e:Event):void {

state = UPDATING_STATE;}

private function mouseReleaseHandler(e:Event):void {state = EASING_STATE;

}

Обработка событий мышки

Page 17: Знакомство с Papervision3d

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;

}

Переключение между состояниями

Page 18: Знакомство с Papervision3d

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; }

Создание материала (текстуры)

Page 19: Знакомство с Papervision3d

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);}

Добавление событий мышки для материала

Page 20: Знакомство с Papervision3d

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

http://blog.papervision3d.org/ http://pv3d.org/ http://papervision2.com/ http://blog.zupko.info/ http://mrdoob.com/blog/

Page 21: Знакомство с Papervision3d

Спасибо за внимание

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