/Actionscripts/org/papervision3d/materials/BitmapWireframeMaterial.as

https://github.com/KBgood/AR-Proj
ActionScript | 117 lines | 92 code | 24 blank | 1 comment | 1 complexity | b9312a8e568bd3de5205690ba1492934 MD5 | raw file
  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. import org.papervision3d.core.material.TriangleMaterial;
  8. import org.papervision3d.core.render.command.RenderTriangle;
  9. import org.papervision3d.core.render.data.RenderSessionData;
  10. import org.papervision3d.core.render.draw.ITriangleDrawer;
  11. public class BitmapWireframeMaterial extends TriangleMaterial implements ITriangleDrawer
  12. {
  13. private static const BITMAP_WIDTH:int = 64;
  14. private static const BITMAP_HEIGHT:int = 64;
  15. private var uvMatrix:Matrix;
  16. protected static var _triMatrix:Matrix = new Matrix();
  17. protected static var _localMatrix:Matrix = new Matrix();
  18. public function BitmapWireframeMaterial(color:Number=0xFF00FF, alpha:Number=1, thickness:Number=3)
  19. {
  20. bitmap = new BitmapData(BITMAP_WIDTH,BITMAP_HEIGHT,true,0x00000000);
  21. lineColor = color;
  22. lineAlpha = alpha;
  23. lineThickness = thickness;
  24. init();
  25. }
  26. private function init():void
  27. {
  28. createBitmapData();
  29. createStaticUVMatrix();
  30. }
  31. override public function drawTriangle(tri:RenderTriangle, graphics:Graphics, renderSessionData:RenderSessionData, altBitmap:BitmapData = null, altUV:Matrix=null):void
  32. {
  33. if(bitmap){
  34. var x0:Number = tri.v0.x;
  35. var y0:Number = tri.v0.y;
  36. var x1:Number = tri.v1.x;
  37. var y1:Number = tri.v1.y;
  38. var x2:Number = tri.v2.x;
  39. var y2:Number = tri.v2.y;
  40. _triMatrix.a = x1 - x0;
  41. _triMatrix.b = y1 - y0;
  42. _triMatrix.c = x2 - x0;
  43. _triMatrix.d = y2 - y0;
  44. _triMatrix.tx = x0;
  45. _triMatrix.ty = y0;
  46. _localMatrix.a = uvMatrix.a;
  47. _localMatrix.b = uvMatrix.b;
  48. _localMatrix.c = uvMatrix.c;
  49. _localMatrix.d = uvMatrix.d;
  50. _localMatrix.tx = uvMatrix.tx;
  51. _localMatrix.ty = uvMatrix.ty;
  52. _localMatrix.concat(_triMatrix);
  53. graphics.beginBitmapFill( bitmap, _localMatrix, tiled, smooth);
  54. graphics.moveTo( x0, y0 );
  55. graphics.lineTo( x1, y1 );
  56. graphics.lineTo( x2, y2 );
  57. graphics.lineTo( x0, y0 );
  58. graphics.endFill();
  59. renderSessionData.renderStatistics.triangles++;
  60. }
  61. }
  62. private function createBitmapData():void
  63. {
  64. var sprite:Sprite = new Sprite();
  65. var graphics:Graphics = sprite.graphics;
  66. graphics.lineStyle(lineThickness,lineColor,lineAlpha);
  67. graphics.moveTo( 1, 1 );
  68. graphics.lineTo( BITMAP_WIDTH-1,1 );
  69. graphics.lineTo( BITMAP_WIDTH-1,BITMAP_HEIGHT-1);
  70. graphics.lineTo( 1, 1 );
  71. graphics.endFill();
  72. bitmap.draw(sprite);
  73. }
  74. private function createStaticUVMatrix():void
  75. {
  76. var w :Number = BITMAP_WIDTH;
  77. var h :Number = BITMAP_HEIGHT;
  78. var u0 :Number = w;
  79. var v0 :Number = 0;
  80. var u1 :Number = 0;
  81. var v1 :Number = 0;
  82. var u2 :Number = w;
  83. var v2 :Number = h;
  84. // Precalculate matrix & correct for mip mapping
  85. var at :Number = ( u1 - u0 );
  86. var bt :Number = ( v1 - v0 );
  87. var ct :Number = ( u2 - u0 );
  88. var dt :Number = ( v2 - v0 );
  89. uvMatrix = new Matrix( at, bt, ct, dt, u0, v0 );
  90. uvMatrix.invert();
  91. }
  92. }
  93. }