
Фото сделано мобильным телефоном с примитивной камерой, объектив котрой к тому же покрылся пылью и мусором.
for (var i:Number=0;i<colxml.children().length();i++)
{
var newcol:DataGridColumn=new DataGridColumn(colxml.children()[i].@title);
newcol.width=colxml.children()[i].@width;
newcol.resizable=false;
newcol.dataField=colxml.children()[i].@attr;
if (colxml.children()[i].@sortby!=null)
{
newcol.sortCompareFunction=mySort;
}
newcol.wordWrap=true;
newcol.itemRenderer=new MultilineHTMLRenderer();
if (colArr[i]!=null) colArr[i]=newcol
else
colArr.push(newcol);
}
DG.columns=colArr;
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.filters.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import org.papervision3d.scenes.MovieScene3D;
import org.papervision3d.core.*;
import org.papervision3d.core.geom.*;
[SWF(width='400',height='400',backgroundColor='0x000000',frameRate='30')]
public class ExampleCamera extends Sprite
{
private var container: Sprite;
private var scene: MovieScene3D;
private var camera: FreeCamera3D;
private var plane:Plane;
private var mouseDown:Boolean;
private var mousePosition:Vertex3D;
public function ExampleCamera()
{
container = new Sprite;
container.x = 200;
container.y = 200;
addChild( container );
scene = new MovieScene3D( container );
camera = new FreeCamera3D();
camera.z = -500;
camera.zoom = 5;
var material:BitmapFileMaterial = new BitmapFileMaterial("texture.jpg");
plane = new Plane( material, 300, 300, 1, 1 );
scene.addChild( plane );
mouseDown = false;
mousePosition = new Vertex3D(0,0,0);
stage.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
stage.addEventListener( MouseEvent.MOUSE_MOVE, mouseMoveHandler );
stage.addEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
private function enterFrameHandler(event:Event):void
{
scene.renderCamera( camera );
}
private function mouseDownHandler(event:MouseEvent):void
{
mousePosition.x = event.stageX;
mousePosition.y = event.stageY;
mouseDown = true;
}
private function mouseUpHandler(event:MouseEvent):void
{
mouseDown = false;
}
private function mouseMoveHandler(event:MouseEvent):void
{
if( mouseDown )
{
camera.rotationY -= (mousePosition.x - event.stageX)*0.20;
camera.rotationX += (mousePosition.y - event.stageY)*0.20;
mousePosition.x = event.stageX;
mousePosition.y = event.stageY;
}
}
}
}
Принцип действия программы таков: по нажатию левой клавиши мыши засекается флаг mouseDown - сигнал начала поворота камеры. Если при нажатой клавише мыши происходит ее перемещение, то угол поворота камеры (rotationY и rotationX) меняется пропорционально тому, насколько был подвинут курсор.
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.utils.Timer;
import flash.filters.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import org.papervision3d.scenes.MovieScene3D;
import org.papervision3d.core.*;
[SWF(width='400',height='400',backgroundColor='0x000000',frameRate='30')]
public class ExampleTransformationRotate extends Sprite
{
private var container: Sprite;
private var scene: MovieScene3D;
private var camera: Camera3D;
private var plane:Plane;
private var myTimer:Timer = new Timer(10);
public function ExampleTransformationRotate()
{
container = new Sprite;
container.x = 200;
container.y = 200;
addChild( container );
scene = new MovieScene3D( container );
camera = new Camera3D();
camera.z = -500;
camera.zoom = 5;
var material:BitmapFileMaterial = new BitmapFileMaterial("texture.jpg");
plane = new Plane( material, 300, 300, 1, 1 );
container.filters = filter;
scene.addChild( plane );
myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
}
private function timerHandler( ev:TimerEvent ): void
{
scene.renderCamera( camera );
}
}
}
На сегодняшний день это все, что мне известно о графических примитивах в ПВ. Или, по крайней мере, то, что у меня работает :)
И тогда я решила: а зачем мне битмап, если его можно засунуть в мувиклип и поступить по последнему рассмотренному примеру? Эта мысль меня крайне успокоила, и я решила продолжать дальше.
package
{
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import org.papervision3d.scenes.MovieScene3D;
[SWF(width='400',height='400',backgroundColor='0x000000',frameRate='30')]
public class ExampleTransformationRotate extends Sprite
{
private var container: Sprite;
private var scene: MovieScene3D;
private var camera: Camera3D;
private var plane:Plane;
public function ExampleTransformationRotate()
{
container = new Sprite;
container.x = 200;
container.y = 200;
addChild( container );
scene = new MovieScene3D( container );
camera = new Camera3D();
camera.z = -500; camera.zoom = 5;
material:ColorMaterial = new ColorMaterial();
material.doubleSided = true;
material.fillColor = 0xFF0000;
material.fillAlpha = 1.0;
plane = new Plane( material, 128, 128, 1, 1 );
scene.addChild( plane );
stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
private function onEnterFrame( event: Event ): void
{
plane.rotationX += 4.35;
plane.rotationY += 6.55;
plane.rotationZ += 0.55;
scene.renderCamera( camera );
}
}
}
Крутится? Лично у меня получился вращающийся плоский красный квадратик. Правда, выкинулось в трейс cообщение:
Papervision3D Beta RC1 (18.06.07)
DisplayObject3D: null
DisplayObject3D: null
DisplayObject3D: null
Оно осталось для меня загадкой.
В общем, можно себя поздравить: хеллоу, ворлд, так сказать, сделан!