<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="initApp()" frameRate="24" width="100%" height="100%" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import org.papervision3d.typography.Letter3D;
import org.papervision3d.materials.special.Letter3DMaterial;
import org.papervision3d.typography.fonts.HelveticaBold;
import org.papervision3d.typography.Text3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.Viewport3D;
import mx.collections.ArrayCollection;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.render.command.VectorShapeHitTest;
import org.papervision3d.events.InteractiveScene3DEvent;
private var camera:Camera3D;
private var scene:Scene3D;
private var render:BasicRenderEngine;
private var view:Viewport3D;
private var primitive:Sphere;
private var pivot:DisplayObject3D;
private var material:Letter3DMaterial;
private var radius:Number = 400;
private var wordColl:ArrayCollection;
private var xmlList:XML =
<root>
<word name="Red" times="5"/>
<word name="Yellow" times="1"/>
<word name="Green" times="10"/>
<word name="Blue" times="10"/>
<word name="Purple" times="1"/>
<word name="Grey" times="5"/>
<word name="Pink" times="1"/>
<word name="Lt.Green" times="10"/>
<word name="Lt.Blue" times="10"/>
<word name="Violet" times="1"/>
<word name="Green-Yellow" times="5"/>
<word name="Yellow-Green" times="1"/>
<word name="Orange" times="10"/>
<word name="Silver" times="10"/>
<word name="Gold" times="1"/>
</root>
private function initApp():void
{
if(pv3dStage.height > pv3dStage.width)
{
radius = pv3dStage.width;
}
else
{
radius = pv3dStage.height;
}
view = new Viewport3D(this.width, this.height, false, true);
view.interactive = true;
scene = new Scene3D();
camera = new Camera3D();
render = new BasicRenderEngine();
pv3dStage.addChild(view);
pivot = new DisplayObject3D("TagContainer");
material = new Letter3DMaterial(0xCCCCCC, 1);
material.interactive=true;
material.lineColor=0xCCCC66;
wordColl = new ArrayCollection();
for each(var node:XML in xmlList..word)
{
wordColl.addItem(new Text3D(node.@name,new HelveticaBold(),material));
}
for each(var item:Text3D in wordColl)
{
var theta:Number = Math.random()*360;
var phi:Number = (1-2*Math.random())*radius;
item.x = Math.sqrt(radius*radius-phi*phi)*Math.cos(theta*Math.PI/180);
item.y = Math.sqrt(radius*radius-phi*phi)*Math.sin(theta*Math.PI/180);
item.z = phi;
item.scale = .4;
item.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onItemOver);
item.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onItemClick);
pivot.addChild(item);
}
scene.addChild(pivot);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);
}
private function onMouseWheel(event:MouseEvent):void
{
camera.zoom += event.delta/2;
}
private function onEnterFrame(event:Event):void
{
pivot.rotationX += ((this.height/2)-mouseY)/200;
render.renderScene(scene, camera, view);
}
private function onItemOver(event:InteractiveScene3DEvent):void
{
}
private function onItemClick(event:InteractiveScene3DEvent):void
{
}
]]>
</mx:Script>
<mx:UIComponent id="pv3dStage" left="0" right="0" top="0" bottom="0"/>
</mx:Application>