Upload
r00z
View
1.931
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Рузанов Игорь.
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
BasicRenderEngineprivate 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_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