📄 bitmapcolormaterial.as.svn-base
字号:
package org.papervision3d.materials
{
import flash.display.BitmapData;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.geom.Matrix;
import org.papervision3d.core.geom.renderables.Triangle3D;
import org.papervision3d.core.render.data.RenderSessionData;
import org.papervision3d.core.render.draw.ITriangleDrawer;
public class BitmapColorMaterial extends BitmapMaterial implements ITriangleDrawer
{
private var uvMatrix:Matrix;
private static const BITMAP_WIDTH:int = 16;
private static const BITMAP_HEIGHT:int = 16;
public function BitmapColorMaterial(color:Number=0xFF00FF, alpha:Number=1)
{
bitmap = new BitmapData(BITMAP_WIDTH,BITMAP_HEIGHT,fillAlpha > 1,0x00000000);
fillColor = color;
fillAlpha = alpha;
precise = false;
init();
}
private function init():void
{
createBitmapData();
createStaticUVMatrix();
}
override public function drawTriangle(face3D:Triangle3D, graphics:Graphics, renderSessionData:RenderSessionData,altBitmap:BitmapData=null, altUV:Matrix = null):void
{
if(bitmap){
var x0:Number = face3D.v0.vertex3DInstance.x;
var y0:Number = face3D.v0.vertex3DInstance.y;
var x1:Number = face3D.v1.vertex3DInstance.x;
var y1:Number = face3D.v1.vertex3DInstance.y;
var x2:Number = face3D.v2.vertex3DInstance.x;
var y2:Number = face3D.v2.vertex3DInstance.y;
_triMatrix.a = x1 - x0;
_triMatrix.b = y1 - y0;
_triMatrix.c = x2 - x0;
_triMatrix.d = y2 - y0;
_triMatrix.tx = x0;
_triMatrix.ty = y0;
_localMatrix.a = uvMatrix.a;
_localMatrix.b = uvMatrix.b;
_localMatrix.c = uvMatrix.c;
_localMatrix.d = uvMatrix.d;
_localMatrix.tx = uvMatrix.tx;
_localMatrix.ty = uvMatrix.ty;
_localMatrix.concat(_triMatrix);
graphics.beginBitmapFill( bitmap, _localMatrix, tiled, smooth);
graphics.moveTo( x0, y0 );
graphics.lineTo( x1, y1 );
graphics.lineTo( x2, y2 );
graphics.lineTo( x0, y0 );
graphics.endFill();
renderSessionData.renderStatistics.triangles++;
}
}
private function createBitmapData():void
{
var sprite:Sprite = new Sprite();
var graphics:Graphics = sprite.graphics;
graphics.beginFill(fillColor, fillAlpha);
graphics.drawRect(0,0,BITMAP_WIDTH,BITMAP_HEIGHT);
graphics.endFill();
bitmap.draw(sprite);
}
private function createStaticUVMatrix():void
{
var w :Number = BITMAP_WIDTH;
var h :Number = BITMAP_HEIGHT;
var u0 :Number = w;
var v0 :Number = 0;
var u1 :Number = 0;
var v1 :Number = 0;
var u2 :Number = w;
var v2 :Number = h;
// Precalculate matrix & correct for mip mapping
var at :Number = ( u1 - u0 );
var bt :Number = ( v1 - v0 );
var ct :Number = ( u2 - u0 );
var dt :Number = ( v2 - v0 );
uvMatrix = new Matrix( at, bt, ct, dt, u0, v0 );
uvMatrix.invert();
}
override protected function destroy():void
{
super.destroy();
bitmap.dispose();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -