<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" applicationComplete="init();" pageTitle="Objects Controls in Papervision 2.0" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.shadematerials.*;
import org.papervision3d.materials.shaders.*;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import com.paranoidart.*;
import flash.display.Stage;
private var scene:Scene3D;
private var camera:Camera3D;
private var view:Viewport3D;
private var thelight:PointLight3D;
private var renderer:BasicRenderEngine;
private var obj3d:DisplayObject3D;
[Bindable]
private var disObjArr:Array = new Array("Torus", "Greeble", "Bike");
private var matList:MaterialsList
private function init():void {
var uiRef:UIComponent = new UIComponent();
papercanvas.addChild(uiRef);
scene = new Scene3D();
camera = new Camera3D();
camera.x = 0;
camera.zoom = 15;
view = new Viewport3D(400, 400, false, false, true);
uiRef.addChild(view);
renderer = new BasicRenderEngine();
thelight = new PointLight3D(true);
scene.addChild(thelight);
matList = new MaterialsList(
{
all: new FlatShadeMaterial(thelight, diffuseid.selectedColor, 0x000000)
});
obj3d = new Torus();
setShade();
scene.addChild(obj3d, "obj3d");
renderer.renderScene(scene, camera, view);
addEventListener(Event.ENTER_FRAME, loop);
credit.htmlText = "<b>Thanks To:</b> <a href='http://the.fontvir.us/b10g/' target='blank'>xero</a>, <a href='http://seraf.mediabox.fr/showcase/as3-geom-class-exporter-for-3ds-max-english/' target='blank'> dreammania</a>, <a href='http://mrdoob.com/blog' target='blank'>mrdoob</a> & <a href='http://www.papervision3d.org/' target='blank'>papervision community</a>";
}
private function createObj():void {
scene.removeChildByName("obj3d");
if (combo.selectedLabel == "Torus") {
obj3d = new Torus();
camera.zoom = 15;
}else if(combo.selectedLabel == "Greeble") {
obj3d = new Greeble();
camera.zoom = 15;
}else if(combo.selectedLabel == "Bike"){
obj3d = new Bike();
camera.zoom = 1500;
}
setShade();
scene.addChild(obj3d, "obj3d");
renderer.renderScene(scene, camera, view);
}
private function loop(e:Event):void {
obj3d.pitch(speedid.value);
obj3d.yaw(speedid.value);
renderer.renderScene(scene, camera, view);
}
private function setLgtDiffuse(e:Event):void {
setShade();
paperpanel.setStyle("backgroundColor", bgcolor.selectedColor);
}
private function setShade(e:Event = null):void {
switch (shadeGrp.selectedValue){
case "cell":
obj3d.material = new CellMaterial(thelight, diffuseid.selectedColor, ambid.selectedColor, 50);
break;
case "flat":
obj3d.material = new FlatShadeMaterial(thelight, diffuseid.selectedColor, ambid.selectedColor);
break;
case "gouraud":
obj3d.material = new GouraudMaterial(thelight, diffuseid.selectedColor, ambid.selectedColor);
break;
case "phong":
obj3d.material = new PhongMaterial(thelight, diffuseid.selectedColor, ambid.selectedColor, 50);
break;
}
}
]]>
</mx:Script>
<mx:HBox>
<mx:Panel id="paperpanel" title="Objects in Papervision3D 2.0" layout="horizontal" height="400"
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" backgroundColor="#FFFFFF">
<mx:Canvas id="papercanvas" width="400"/>
</mx:Panel>
<mx:Panel id="pan" title="Controls" height="400" cachePolicy="on"
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" >
<mx:VBox width="100%" >
<mx:VBox borderStyle="solid" backgroundColor="0xCCCCCC" backgroundAlpha="0.5"
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" width="100%" >
<mx:Label text="Select Object:" fontWeight="bold"/>
<mx:ComboBox id="combo" dataProvider="{disObjArr}" close="createObj();"/>
</mx:VBox>
<mx:VBox borderStyle="solid" backgroundColor="0xCCCCCC" backgroundAlpha="0.5"
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" width="100%" >
<mx:Label text="Light Controls:" fontWeight="bold"/>
<mx:HBox verticalAlign="middle" width="100%">
<mx:Label text="Diffuse" width="100%"/>
<mx:ColorPicker id="diffuseid" selectedColor="0x000033" close="setLgtDiffuse(event);" textAlign="right"/>
</mx:HBox>
<mx:HBox verticalAlign="middle" width="100%">
<mx:Label text="Ambient" width="100%"/>
<mx:ColorPicker id="ambid" selectedColor="0x00FFFF" close="setLgtDiffuse(event);" textAlign="right"/>
</mx:HBox>
</mx:VBox>
<mx:VBox borderStyle="solid" backgroundColor="0xCCCCCC" backgroundAlpha="0.5"
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" width="100%">
<mx:HBox verticalAlign="middle" width="100%">
<mx:Label text="Background:" width="100%"/>
<mx:ColorPicker id="bgcolor" selectedColor="0xFFFFFF" close="setLgtDiffuse(event);" textAlign="right"/>
</mx:HBox>
<mx:HBox verticalAlign="middle" width="100%">
<mx:Label text="Speed:" width="100%"/>
<mx:NumericStepper id="speedid" minimum="1" maximum="10" width="40"/>
</mx:HBox>
</mx:VBox>
<mx:VBox borderStyle="solid" backgroundColor="0xCCCCCC" backgroundAlpha="0.5"
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" width="100%" >
<mx:Label text="Select Shade:" fontWeight="bold" />
<mx:RadioButtonGroup id="shadeGrp" itemClick="setShade(event);"/>
<mx:RadioButton label="FlatShade" value="flat" groupName="shadeGrp" selected="true" />
<mx:RadioButton label="Cell" value="cell" groupName="shadeGrp"/>
<mx:RadioButton label="Gouraud" value="gouraud" groupName="shadeGrp"/>
<mx:RadioButton label="Phong" value="phong" groupName="shadeGrp"/>
</mx:VBox>
</mx:VBox>
</mx:Panel>
</mx:HBox>
<mx:HBox>
<mx:Text id="credit" />
</mx:HBox>
</mx:Application>