PV3D CUBE + tweener
// Shaded Papervision Cube with Tweener (C) edvardtoth.com
package {
import flash.display.*;
import flash.events.*;
import flash.filters.GradientGlowFilter;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.events.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import caurina.transitions.Tweener;
public class Rotatecube extends MovieClip
{
private var effectWidth:Number = 300; // because viewport has clipping turned off
private var effectHeight:Number = 300;
private var glowFilter:GradientGlowFilter = new GradientGlowFilter (0, 45, [0xf0f0f0, 0xf0f0f0, 0xf0f0f0], [0, 0.5, 1], [0x00, 0x50, 0xff], 6, 6, 10, 1, "outer", false);
private var viewport:Viewport3D;
private var scene3d:Scene3D;
private var renderer:BasicRenderEngine;
private var display:DisplayObject3D;
private var object:Cube;
private var camera:FreeCamera3D;
private var pointLight:PointLight3D;
private var materials:MaterialsList;
private var flatShaderMat:FlatShadeMaterial;
private var rotXValue:Number;
private var rotZValue:Number;
private var rotYValue:Number;
private var limit:Number = 1.5;
public function Rotatecube ()
{
stage.showDefaultContextMenu = false;
stage.quality = StageQuality.MEDIUM;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
this.filters = [glowFilter];
// material
flatShaderMat = new FlatShadeMaterial (pointLight, 0x999900, 0x99CC00);
flatShaderMat.doubleSided = false;
materials = new MaterialsList ();
materials.addMaterial (flatShaderMat, "all");
// scene
scene3d = new Scene3D();
renderer = new BasicRenderEngine();
camera = new FreeCamera3D(1, 600);
viewport = new Viewport3D(effectWidth, effectHeight, false, false, false, false);
display = new DisplayObject3D();
object = new Cube (materials, 300, 300, 300, 1, 1, 1);
// light
pointLight = new PointLight3D (true, false); // 2nd would be true for collada
pointLight.x = 200;
pointLight.y = 0;
pointLight.z = 500;
display.addChild (object);
scene3d.addChild (display, "Display");
scene3d.addChild (pointLight);
addChild (viewport);
rotXValue = randomize (0, 360);
rotYValue = randomize (0, 360);
rotZValue = randomize (0, 360);
camera.rotationX = rotXValue;
camera.rotationY = rotYValue;
camera.rotationZ = rotZValue;
updateFrame();
recalcValues();
}
private function updateFrame():void
{
camera.x=camera.y=camera.z=0;
camera.moveBackward(500);
pointLight.copyPosition (camera);
renderer.renderScene (scene3d, camera, viewport);
}
private function recalcValues ():void
{
rotXValue = randomize (0, 360);
rotYValue = randomize (0, 360);
rotZValue = randomize (0, 360);
Tweener.addTween (camera, {rotationX:rotXValue, rotationY:rotYValue, rotationZ: rotZValue, onUpdate:updateFrame, onComplete:recalcValues, transition:"easeInOutElastic", time:3});
}
private function randomize(min:Number, max:Number):Number
{
return (Math.random()*(max - min) + min);
}
}
}
package {
import flash.display.*;
import flash.events.*;
import flash.filters.GradientGlowFilter;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.events.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import caurina.transitions.Tweener;
public class Rotatecube extends MovieClip
{
private var effectWidth:Number = 300; // because viewport has clipping turned off
private var effectHeight:Number = 300;
private var glowFilter:GradientGlowFilter = new GradientGlowFilter (0, 45, [0xf0f0f0, 0xf0f0f0, 0xf0f0f0], [0, 0.5, 1], [0x00, 0x50, 0xff], 6, 6, 10, 1, "outer", false);
private var viewport:Viewport3D;
private var scene3d:Scene3D;
private var renderer:BasicRenderEngine;
private var display:DisplayObject3D;
private var object:Cube;
private var camera:FreeCamera3D;
private var pointLight:PointLight3D;
private var materials:MaterialsList;
private var flatShaderMat:FlatShadeMaterial;
private var rotXValue:Number;
private var rotZValue:Number;
private var rotYValue:Number;
private var limit:Number = 1.5;
public function Rotatecube ()
{
stage.showDefaultContextMenu = false;
stage.quality = StageQuality.MEDIUM;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
this.filters = [glowFilter];
// material
flatShaderMat = new FlatShadeMaterial (pointLight, 0x999900, 0x99CC00);
flatShaderMat.doubleSided = false;
materials = new MaterialsList ();
materials.addMaterial (flatShaderMat, "all");
// scene
scene3d = new Scene3D();
renderer = new BasicRenderEngine();
camera = new FreeCamera3D(1, 600);
viewport = new Viewport3D(effectWidth, effectHeight, false, false, false, false);
display = new DisplayObject3D();
object = new Cube (materials, 300, 300, 300, 1, 1, 1);
// light
pointLight = new PointLight3D (true, false); // 2nd would be true for collada
pointLight.x = 200;
pointLight.y = 0;
pointLight.z = 500;
display.addChild (object);
scene3d.addChild (display, "Display");
scene3d.addChild (pointLight);
addChild (viewport);
rotXValue = randomize (0, 360);
rotYValue = randomize (0, 360);
rotZValue = randomize (0, 360);
camera.rotationX = rotXValue;
camera.rotationY = rotYValue;
camera.rotationZ = rotZValue;
updateFrame();
recalcValues();
}
private function updateFrame():void
{
camera.x=camera.y=camera.z=0;
camera.moveBackward(500);
pointLight.copyPosition (camera);
renderer.renderScene (scene3d, camera, viewport);
}
private function recalcValues ():void
{
rotXValue = randomize (0, 360);
rotYValue = randomize (0, 360);
rotZValue = randomize (0, 360);
Tweener.addTween (camera, {rotationX:rotXValue, rotationY:rotYValue, rotationZ: rotZValue, onUpdate:updateFrame, onComplete:recalcValues, transition:"easeInOutElastic", time:3});
}
private function randomize(min:Number, max:Number):Number
{
return (Math.random()*(max - min) + min);
}
}
}

wordpress网站更新了,非常漂亮的界面。同时它也发布了iphone用的版本。并提供2.6版本的pc版本。
8月 6th, 2008 at 9:03 上午
Thanks for the pingback, but removing the copyright message was not very appropriate. Also, why is it yellow, and most importantly, why is it so incredibly slow?
8月 6th, 2008 at 10:00 上午
hah…forgot it and already added now
no idea…same coding as yours only change color
8月 6th, 2008 at 12:01 下午
If you are using an FLA, perhaps the stage framerate is set to something like the default 12? Just a thought…
8月 6th, 2008 at 4:20 下午
u are right
my god i even forget to set the framerate
now it’s 30