topical media & game development

talk show tell print

#graphic-flex-image-effects-07-Flex-MarblePyramid.ax

#graphic-flex-image-effects-07-Flex-MarblePyramid.ax [swf] [flash] flex


  package {
  
          import aether.textures.natural.MarbleTexture;
  
          import flash.display.Bitmap;
          import flash.display.BitmapData;
          import flash.display.Sprite;
          import flash.display.TriangleCulling;
          import flash.events.Event;
          import flash.geom.Matrix;
          import flash.geom.Matrix3D;
          import flash.geom.Rectangle;
          import flash.geom.Vector3D;
  
          [SWF(width=600, height=400, backgroundColor=0x000000)]
  
          
Demonstrates the use of drawTriangles(), Matrix3D and Vector3D to render a 3D model. This draws a textured pyramid to the screen and rotates it each frame. The texture is completed generated at runtime using the aether library.

  
          public class @ax-graphic-flex-image-effects-07-Flex-MarblePyramid extends Sprite {
  
                  private var _marble:BitmapData;
                  private var _model:graphic_flex_image_effects_07_Flex_Mesh3D;
                  private var _transform:Matrix3D;
  
                  
Constructor. Centers sprite, creates model and texture then renders model. An event listener is set up to handle the animation.

  
                  public function @ax-graphic-flex-image-effects-07-Flex-MarblePyramid() {
                          x = stage.stageWidth/2;
                          y = stage.stageHeight/2;
                          _model = new graphic_flex_image_effects_07_Flex_PyramidMesh(this);
                          // creates initial 3D transform
                          _transform = new Matrix3D();
                          createMarble();
                          render();
                          addEventListener(Event.ENTER_FRAME, onSpriteEnterFrame);
                  }
  
                  
Generates marble texture to be used with the pyramid model.

  
                  private function createMarble():void {
                          // creates a marble texture using aether
                          _marble = new MarbleTexture(512, 512, 0x227766).draw();
                          // creates four black rectangles of different opacity
                          // in large bitmap data to be used for baked in lighting
                          var lighting:BitmapData = new BitmapData(900, 900, true, 0x00000000);
                          lighting.fillRect(new Rectangle(450, 0, 450, 450), 0x44000000);
                          lighting.fillRect(new Rectangle(0, 450, 450, 450), 0x44000000);
                          lighting.fillRect(new Rectangle(450, 450, 450, 450), 0x88000000);
                          // image is translated and rotated for better use with the texture and model
                          var matrix:Matrix = new Matrix();
                          matrix.translate(-450, -450);
                          matrix.rotate(Math.PI*.25);
                          matrix.translate(255, 255);
                          // draws lighting onto marble texture
                          _marble.draw(lighting, matrix);
                          lighting.dispose();
                  }
  
                  
Draws the 3D model to the screen using drawTriangles().

  
                  private function render():void {
                          // applies current transform to the model
                          _model.applyTransform(_transform);
                          graphics.clear();
                          graphics.beginBitmapFill(_marble);
                          graphics.drawTriangles(
                                  _model.vertices,
                                  _model.sides,
                                  _model.uvtData,
                                  TriangleCulling.NEGATIVE
                          );
                          graphics.endFill();
                  }
  
                  
Handler for the ENTER_FRAME event. This rotates the transform, then rerenders the model.
parameter: event Event dispatched by this sprite.

  
                  private function onSpriteEnterFrame(event:Event):void {
                          _transform.appendRotation(2, Vector3D.Y_AXIS);
                          render();
                  }
  
          }
  
  }
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.