home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Templates / Flash / flashmo_101_3d_carousel / org / papervision3d / materials / BitmapWireframeMaterial.as < prev    next >
Text File  |  2007-07-19  |  3KB  |  112 lines

  1. package org.papervision3d.materials
  2. {
  3.     import flash.display.BitmapData;
  4.     import flash.display.Graphics;
  5.     import flash.display.Sprite;
  6.     import flash.geom.Matrix;
  7.     
  8.     import org.papervision3d.core.draw.IFaceDrawer;
  9.     import org.papervision3d.core.geom.Face3D;
  10.     import org.papervision3d.core.geom.Vertex2D;
  11.     import org.papervision3d.objects.DisplayObject3D;
  12.  
  13.     public class BitmapWireframeMaterial extends BitmapMaterial implements IFaceDrawer
  14.     {
  15.         private static const BITMAP_WIDTH:int = 64;
  16.         private static const BITMAP_HEIGHT:int = 64;
  17.         
  18.         private var uvMatrix:Matrix;
  19.         
  20.         public function BitmapWireframeMaterial(color:Number=0xFF00FF, alpha:Number=1, thickness:Number=3)
  21.         {
  22.             super(new BitmapData(2,2,true));
  23.             bitmap = new BitmapData(BITMAP_WIDTH,BITMAP_HEIGHT,true,0x00000000);
  24.             lineColor = color;
  25.             lineAlpha = alpha;
  26.             lineThickness = thickness;
  27.             init();
  28.         }
  29.         
  30.         private function init():void
  31.         {
  32.             createBitmapData();
  33.             createStaticUVMatrix();
  34.         }
  35.         
  36.         override public function drawFace3D(instance:DisplayObject3D, face3D:Face3D, graphics:Graphics, v0:Vertex2D, v1:Vertex2D, v2:Vertex2D):int
  37.         {
  38.             if(bitmap){
  39.                 var x0:Number = v0.x;
  40.                 var y0:Number = v0.y;
  41.                 var x1:Number = v1.x;
  42.                 var y1:Number = v1.y;
  43.                 var x2:Number = v2.x;
  44.                 var y2:Number = v2.y;
  45.                 
  46.                 _triMatrix.a = x1 - x0;
  47.                 _triMatrix.b = y1 - y0;
  48.                 _triMatrix.c = x2 - x0;
  49.                 _triMatrix.d = y2 - y0;
  50.                 _triMatrix.tx = x0;
  51.                 _triMatrix.ty = y0;
  52.                     
  53.                 _localMatrix.a = uvMatrix.a;
  54.                 _localMatrix.b = uvMatrix.b;
  55.                 _localMatrix.c = uvMatrix.c;
  56.                 _localMatrix.d = uvMatrix.d;
  57.                 _localMatrix.tx = uvMatrix.tx;
  58.                 _localMatrix.ty = uvMatrix.ty;
  59.                 _localMatrix.concat(_triMatrix);
  60.                 
  61.                 graphics.beginBitmapFill( bitmap, _localMatrix, true, smooth);
  62.                 graphics.moveTo( x0, y0 );
  63.                 graphics.lineTo( x1, y1 );
  64.                 graphics.lineTo( x2, y2 );
  65.                 graphics.lineTo( x0, y0 );
  66.                 graphics.endFill();
  67.                 return 1;    
  68.             }
  69.             return 0;
  70.         }
  71.         
  72.         private function createBitmapData():void
  73.         {
  74.             var sprite:Sprite = new Sprite();
  75.             var graphics:Graphics = sprite.graphics;
  76.             
  77.             
  78.             graphics.lineStyle(lineThickness,lineColor,lineAlpha);
  79.             graphics.moveTo( 1, 1 );
  80.             graphics.lineTo( BITMAP_WIDTH-1,1 );
  81.             graphics.lineTo( BITMAP_WIDTH-1,BITMAP_HEIGHT-1);
  82.             graphics.lineTo( 1, 1 );
  83.             graphics.endFill();
  84.             
  85.             bitmap.draw(sprite);
  86.             
  87.         }
  88.         
  89.         private function createStaticUVMatrix():void
  90.         {
  91.             var w  :Number = BITMAP_WIDTH;
  92.             var h  :Number = BITMAP_HEIGHT;
  93.  
  94.             var u0 :Number = w;
  95.             var v0 :Number = 0;
  96.             var u1 :Number = 0;
  97.             var v1 :Number = 0;
  98.             var u2 :Number = w;
  99.             var v2 :Number = h;
  100.             
  101.             // Precalculate matrix & correct for mip mapping
  102.             var at :Number = ( u1 - u0 );
  103.             var bt :Number = ( v1 - v0 );
  104.             var ct :Number = ( u2 - u0 );
  105.             var dt :Number = ( v2 - v0 );
  106.  
  107.             uvMatrix = new Matrix( at, bt, ct, dt, u0, v0 );
  108.             uvMatrix.invert();    
  109.         }
  110.         
  111.     }
  112. }