
Код AS3:
package
{
import flash.display.Bitmap;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.view.BasicView;
[SWF(width="640", height="480", backgroundColor="#000000", frameRate="30")]
public class CubeWithDifferentSides extends BasicView
{
[Embed(source='2782350904_dd8b955fb1.jpg')]
private var backAsset:Class;
[Embed(source='2782350904_dd8b955fb1.jpg')]
private var bottomAsset:Class;
[Embed(source='2782350904_dd8b955fb1.jpg')]
private var frontAsset:Class;
[Embed(source='2782350904_dd8b955fb1.jpg')]
private var leftAsset:Class;
[Embed(source='2782350904_dd8b955fb1.jpg')]
private var rightAsset:Class;
[Embed(source='2782350904_dd8b955fb1.jpg')]
private var topAsset:Class;
private var cube:Cube;
private var frontMaterial:BitmapMaterial = new BitmapMaterial(new frontAsset().bitmapData, true);
private var backMaterial:BitmapMaterial = new BitmapMaterial(new backAsset().bitmapData, true);
private var leftMaterial:BitmapMaterial = new BitmapMaterial(new leftAsset().bitmapData, true);
private var rightMaterial:BitmapMaterial = new BitmapMaterial(new rightAsset().bitmapData, true);
private var topMaterial:BitmapMaterial = new BitmapMaterial(new topAsset().bitmapData, true);
private var bottomMaterial:BitmapMaterial = new BitmapMaterial(new bottomAsset().bitmapData, true);
public function CubeWithDifferentSides()
{
var materialsList:MaterialsList = new MaterialsList();
viewport.interactive = true;
frontMaterial.interactive = true;
frontMaterial.name = "front";
backMaterial.interactive = true;
backMaterial.name = "back";
leftMaterial.interactive = true;
leftMaterial.name = "left";
rightMaterial.interactive = true;
rightMaterial.name = "right";
topMaterial.interactive = true;
topMaterial.name = "top";
bottomMaterial.interactive = true;
bottomMaterial.name = "bottom";
cube = new Cube(new MaterialsList( {front: frontMaterial,
back: backMaterial,
left: leftMaterial,
right: rightMaterial,
top:topMaterial,
bottom: bottomMaterial} ),
500, 500, 500, 3, 3, 3);
/*
// Альтернативный вариант инициализацмм куба
materialsList.addMaterial(bottomMaterial, "bottom");
materialsList.addMaterial(backMaterial, "back");
materialsList.addMaterial(frontMaterial, "front");
materialsList.addMaterial(leftMaterial, "left");
materialsList.addMaterial(rightMaterial, "right");
materialsList.addMaterial(topMaterial, "top");
cube = new Cube(materialsList, 500, 500, 500, 3, 3, 3);
*/
cube.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onCubeOver);
cube.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onCubeOut);
cube.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onCubeClick);
scene.addChild(cube);
startRendering();
}
private function onCubeOver(event:InteractiveScene3DEvent):void
{
viewport.buttonMode = true;
}
private function onCubeOut(event:InteractiveScene3DEvent):void
{
viewport.buttonMode = false;
}
override protected function onRenderTick(event:Event=null):void
{
cube.rotationY += (viewport.containerSprite.mouseX - cube.rotationY) * .1;
cube.rotationX += (viewport.containerSprite.mouseY - cube.rotationX) * .1;
renderer.renderScene(scene, camera, viewport);
}
private function onCubeClick(event:InteractiveScene3DEvent):void
{
switch(event.face3d.material.name)
{
case 'front':
navigateToURL(new URLRequest('http://mySite.com/1'));
break;
case 'back':
navigateToURL(new URLRequest('http://mySite.com/2'));
break;
case 'left':
navigateToURL(new URLRequest('http://mySite.com/3'));
break;
case 'right':
navigateToURL(new URLRequest('http://mySite.com/4'));
break;
case 'top':
navigateToURL(new URLRequest('http://mySite.com/4'));
break;
case 'bottom':
navigateToURL(new URLRequest('http://mySite.com/4'));
break;
}
}
}
}