Index: materials/BitmapMaterial.as =================================================================== --- materials/BitmapMaterial.as (revision 910) +++ materials/BitmapMaterial.as (working copy) @@ -1,24 +1,26 @@ -package org.papervision3d.materials -{ - import org.papervision3d.Papervision3D; - import org.papervision3d.core.geom.renderables.Triangle3D; - import org.papervision3d.core.geom.renderables.Vertex3DInstance; - import org.papervision3d.core.log.PaperLogger; - import org.papervision3d.core.material.TriangleMaterial; - import org.papervision3d.core.proto.MaterialObject3D; - import org.papervision3d.core.render.command.RenderTriangle; - import org.papervision3d.core.render.data.RenderSessionData; - import org.papervision3d.core.render.draw.ITriangleDrawer; - import org.papervision3d.materials.utils.PrecisionMode; - import org.papervision3d.materials.utils.RenderRecStorage; - - import flash.display.BitmapData; - import flash.display.Graphics; - import flash.geom.Matrix; - import flash.geom.Point; - import flash.geom.Rectangle; - import flash.utils.Dictionary; - +package org.papervision3d.materials { + import org.papervision3d.Papervision3D; + import org.papervision3d.core.geom.renderables.Triangle3D; + import org.papervision3d.core.geom.renderables.Vertex3DInstance; + import org.papervision3d.core.log.PaperLogger; + import org.papervision3d.core.material.TriangleMaterial; + import org.papervision3d.core.proto.MaterialObject3D; + import org.papervision3d.core.render.command.RenderTriangle; + import org.papervision3d.core.render.data.RenderSessionData; + import org.papervision3d.core.render.draw.ITriangleDrawer; + import org.papervision3d.materials.utils.PrecisionMode; + import org.papervision3d.materials.utils.RenderRecStorage; + + import flash.display.BitmapData; + import flash.display.Graphics; + import flash.geom.Matrix; + import flash.geom.Point; + import flash.geom.Rectangle; + import flash.utils.Dictionary; + CONFIG::flash10 + { + import flash.display.TriangleCulling; + } /** * The BitmapMaterial class creates a texture from a BitmapData object. * @@ -50,12 +52,7 @@ * Levels of mip mapping to force. */ public static var MIP_MAP_DEPTH :Number = 8; - - /** - * Precision mode indicates how triangles are created for precise texture render. - */ - public var precisionMode:int = PrecisionMode.ORIGINAL; - + /** * Precision mode indicates how triangles are created for precise texture render. */ public var precisionMode:int = PrecisionMode.ORIGINAL; public var uvMatrices:Dictionary = new Dictionary(); /** @@ -107,14 +104,22 @@ private var y1:Number; private var x2:Number; private var y2:Number; + + CONFIG::flash10 + { + private var vertices:Vector., // xy coords of triangle on 2d output bitmap to be "filled" + indices:Vector. = Vector.([0,1,2]), // mapping of input sets of vertices to triangle vertices + uvtData:Vector. = null; // UV data points matching input vertices, along with a T value (scale due to z-depth) + private var fl:Number; // focal length + } + /** * drawTriangle */ override public function drawTriangle(tri:RenderTriangle, graphics:Graphics, renderSessionData:RenderSessionData, altBitmap:BitmapData = null, altUV:Matrix = null):void { - // trace("at drawing triangle???"); _triMap = altUV ? altUV : (uvMatrices[tri] || transformUVRT(tri)); - if(!_precise || !_triMap){ + if(!_precise || !_triMap) { if( lineAlpha ) graphics.lineStyle( lineThickness, lineColor, lineAlpha ); if( bitmap ) @@ -154,7 +159,32 @@ graphics.lineStyle(); renderSessionData.renderStatistics.triangles++; }else{ - if(bitmap){ + if (precisionMode == PrecisionMode.FLASH_10) + { + if (CONFIG::flash10) + { + vertices = Vector.([ + tri.v0.x, tri.v0.y, + tri.v1.x, tri.v1.y, + tri.v2.x, tri.v2.y + ]); + fl = renderSessionData.camera.focus; + uvtData = Vector.([ + tri.triangle.uv0.u * maxU, maxV-tri.triangle.uv0.v * maxV, (fl/(fl+tri.v0.z)), + tri.triangle.uv1.u * maxU, maxV-tri.triangle.uv1.v * maxV, (fl/(fl+tri.v1.z)), + tri.triangle.uv2.u * maxU, maxV-tri.triangle.uv2.v * maxV, (fl/(fl+tri.v2.z)) + ]); + graphics.beginBitmapFill(bitmap, null, tiled, smooth); + graphics.drawTriangles(vertices, indices, uvtData, TriangleCulling.NONE); + graphics.endFill(); + renderSessionData.renderStatistics.triangles++; + } + else + { + PaperLogger.warning("WARNING: PrecisionMode.FLASH_10 set but pv3d not compiled for Flash10 support."); + } + } + else if(bitmap){ focus = renderSessionData.camera.focus; tempPreBmp = altBitmap ? altBitmap : bitmap; tempPreRSD = renderSessionData; Index: materials/utils/PrecisionMode.as =================================================================== --- materials/utils/PrecisionMode.as (revision 910) +++ materials/utils/PrecisionMode.as (working copy) @@ -11,5 +11,6 @@ */ public static var ORIGINAL :int = 0; public static var STABLE :int = 1; + public static var FLASH_10 :int = 2; } -} \ No newline at end of file +}