dehash »  AS3 Papervision3D GreatWhite example code «

Some AS3 code examples that use Papervision3D GreatWhite from SVN. Made with FlashDevelop and Flex3 SDK but as they are pure AS3 examples they should work mostly the same in Flash 9 too. Some examples are clean and basic but others are less so and some are just ideas for things to explore later when more examples are added. Will try to put build/revision number in each post but note when using SVN it is inevitable that if some time has passed parts of these they may not work without tweaking in later builds. The source code text is released as open source under the BSD License which is a very open license with few restrictions. Any external media used however (bitmaps, flv, sound etc) is not covered by this license. If you notice mistakes please email dehash_at_gmail_dot_com.

 

Title: InteractivePlanesBoard

Board of interactive planes - click on a plane - revision 856 - icon from DryIcons

Actionscript:
  1. /**
  2. * v0.1 code by dehash.com 2008
  3. * Released as open source under the BSD License
  4. * http://www.opensource.org/licenses/bsd-license.php
  5. */
  6. package com.dehash.pv3d.examples.interactivity {
  7. //{{{ IMPORTS
  8. import flash.filters.DropShadowFilter;
  9. import org.papervision3d.objects.DisplayObject3D;
  10. import org.papervision3d.objects.primitives.Plane;
  11. import org.papervision3d.view.BasicView;
  12. import org.papervision3d.materials.ColorMaterial;
  13. import org.papervision3d.materials.BitmapMaterial;
  14. import org.papervision3d.events.InteractiveScene3DEvent;
  15. import flash.events.Event;
  16. // http://code.google.com/p/tweener/
  17. import caurina.transitions.Tweener;
  18. [SWF(width="800", height="600", backgroundColor="0xFFFFFF")]
  19. //}}}
  20. public class InteractivePlanesBoard extends BasicView {
  21. //{{{ VARS
  22. private var holder:DisplayObject3D;
  23. private var quality:uint = 2;
  24. [Embed(source='assets/add.png')]
  25. private var pic:Class;
  26. private var planes:Array;
  27. //}}}
  28. public function InteractivePlanesBoard(viewportWidth:Number = 800, viewportHeight:Number = 600,
  29. scaleToStage:Boolean=true, interactive:Boolean=true, cameraType:String="CAMERA3D"){
  30. super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
  31. //
  32. planes = [];
  33. viewport.buttonMode = true;
  34. viewport.useHandCursor = true;
  35. //
  36. holder = new DisplayObject3D();
  37. //var bg:Plane = new Plane(new ColorMaterial(0xCCCCCC), 600, 600, quality, quality);
  38. //holder.addChild(bg);
  39. var gap:Number = 120;
  40. for (var i:int = 0; i <4;i++){
  41. for (var j:int = 0; j <4; j++) {
  42. var t:DisplayObject3D = makeTwoSidedDisplayObject();
  43. t.x = (i * gap) - (1.5*gap);   
  44. t.y = (j * gap) - (1.5*gap);   
  45. holder.addChild(t);
  46. }
  47. }
  48. scene.addChild(holder);
  49. camera.target = holder;
  50. holder.scale = 0;
  51. Tweener.addTween(holder, { time:3, transition:'easeinoutback', scale: 3 } );
  52.  
  53. // switch a line of planes to use BitmapMaterial
  54. var bitmapMaterial:BitmapMaterial = new BitmapMaterial(new pic().bitmapData);
  55. bitmapMaterial.interactive = true;
  56. bitmapMaterial.smooth = true;
  57. bitmapMaterial.tiled = true;
  58. planes[0].material = bitmapMaterial;
  59. planes[5].material = bitmapMaterial;
  60. planes[10].material = bitmapMaterial;
  61. planes[15].material = bitmapMaterial;
  62.  
  63. this.startRendering();
  64. }
  65. //
  66. private function makeTwoSidedDisplayObject():DisplayObject3D {
  67. var do3d:DisplayObject3D = new DisplayObject3D();
  68. do3d.useOwnContainer = true;
  69. do3d.filters = [new DropShadowFilter()];
  70. var p:Plane = makePlane();
  71. var p2:Plane = makePlane();
  72. p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
  73. p2.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
  74. do3d.addChild(p);
  75. do3d.addChild(p2);
  76. p2.rotationY = 180;
  77. p.z = 1;
  78. planes.push(p);
  79. return do3d;
  80. }
  81. //
  82. private function makePlane():Plane {
  83. var colorMaterial:ColorMaterial = new ColorMaterial(Math.random() * 0xffffff);
  84. colorMaterial.interactive = true;
  85. var p:Plane = new Plane(colorMaterial, 100, 100, quality, quality);
  86. return p;
  87. }
  88. //
  89. private function planeClickedHandler(e:InteractiveScene3DEvent):void {
  90. if (!Tweener.isTweening(e.target.parent)){
  91. var rot:Number = e.target.parent.rotationY + 180;
  92. Tweener.addTween(e.target.parent, { time:2, transition:'easeinoutback', rotationY: rot } );
  93. }
  94. }
  95. //
  96. protected override function onRenderTick(event:Event = null):void {
  97. var rotY: Number = (mouseY-(stage.stageHeight/2))/(stage.height/2)*(1200);
  98. var rotX: Number = (mouseX-(stage.stageWidth/2))/(stage.width/2)*(-1200);
  99. camera.x = camera.x + (rotX - camera.x) / 5;
  100. camera.y = camera.y + (rotY - camera.y) / 5;
  101. renderer.renderScene(scene, camera, viewport)
  102. }
  103. }
  104. }