Title: SwapCubeMaterial
Swapping a cube material at runtime. Mouse click on stage changes cube material. Textures created using GouraudMaterial with DropShadowFilter. Uses BasicView - revision 702
Actionscript:
-
/**
-
* v0.1 code by dehash.com 2008
-
* Released as open source under the BSD License
-
* http://www.opensource.org/licenses/bsd-license.php
-
*/
-
-
package com.dehash.pv3d.examples.materials {
-
import org.papervision3d.materials.shadematerials.GouraudMaterial;
-
import org.papervision3d.objects.primitives.Cube;
-
import org.papervision3d.view.BasicView;
-
import org.papervision3d.lights.PointLight3D;
-
import org.papervision3d.materials.utils.MaterialsList;
-
import flash.filters.DropShadowFilter;
-
import flash.events.MouseEvent;
-
import flash.events.Event;
-
-
[SWF(width="800", height="600", backgroundColor="0xFFFFFF")]
-
-
public class SwappingCubeMaterial extends BasicView {
-
-
private var cube:Cube;
-
private var light:PointLight3D;
-
-
public function SwappingCubeMaterial(viewportWidth:Number = 800,
-
viewportHeight:Number = 600, scaleToStage:Boolean = true,
-
interactive:Boolean=false, cameraType:String="CAMERA3D") {
-
super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
-
-
stage.addEventListener(MouseEvent.MOUSE_DOWN, changeMaterial);
-
-
light = new PointLight3D();
-
-
var materialsList:MaterialsList = new MaterialsList();
-
materialsList.addMaterial(new GouraudMaterial(light, 0x491ca5, 0x270e59), "left");
-
materialsList.addMaterial(new GouraudMaterial(light, 0x491ca5, 0x270e59), "back");
-
materialsList.addMaterial(new GouraudMaterial(light, 0x491ca5, 0x270e59), "top");
-
materialsList.addMaterial(new GouraudMaterial(light, 0x491ca5, 0x270e59), "right");
-
materialsList.addMaterial(new GouraudMaterial(light, 0x491ca5, 0x270e59), "bottom");
-
materialsList.addMaterial(new GouraudMaterial(light, 0x491ca5, 0x270e59), "front");
-
-
cube = new Cube(materialsList, 400, 400, 400, 8, 8, 8);
-
cube.useOwnContainer = true;
-
cube.filters = [new DropShadowFilter(12, 45, 0, 0.75, 12, 12)];
-
scene.addChild(cube);
-
camera.target = cube;
-
-
renderer.renderScene(scene, camera, viewport);
-
this.startRendering();
-
}
-
-
protected override function onRenderTick(event:Event = null):void {
-
cube.yaw((mouseY - (stage.stageHeight/2))/(stage.height / 2) * 5);
-
cube.roll((mouseX - (stage.stageWidth/2))/(stage.width / 2) * -5);
-
camera.x -= (camera.x - Math.sin(mouseX * 0.01) * 1000) / 8;
-
camera.z -= (camera.z - Math.cos(mouseX * 0.01) * 1000) / 8;
-
camera.y -= (camera.y - viewport.containerSprite.mouseY * 5) / 8;
-
light.copyTransform( camera );
-
renderer.renderScene(scene, camera, viewport);
-
}
-
-
-
-
private function changeMaterial(event:MouseEvent):void {
-
cube.replaceMaterialByName(new GouraudMaterial(light, 0xa51c49, 0x590e27), 'left');
-
cube.replaceMaterialByName(new GouraudMaterial(light, 0xa51c49, 0x590e27), 'back');
-
cube.replaceMaterialByName(new GouraudMaterial(light, 0xa51c49, 0x590e27), 'top');
-
cube.replaceMaterialByName(new GouraudMaterial(light, 0xa51c49, 0x590e27), 'right');
-
cube.replaceMaterialByName(new GouraudMaterial(light, 0xa51c49, 0x590e27), 'bottom');
-
cube.replaceMaterialByName(new GouraudMaterial(light, 0xa51c49, 0x590e27), 'front');
-
}
-
-
}
-
}