Flash9てポリゴン

■関数の開発
「Flash10」からはGPUが使えポリゴン描画が楽そうですが、「Flash9」には、そんな機能はないので、まずはテクスチャを張ったポリゴンを表示するルーチンを開発します。
「Glib01.as」に以下の関数を追加してください。

package {
	import flash.display.*;
	import flash.geom.*;
	import flash.text.*;

	public class Glib01 {
               :
           ここは前回と同じ
               :
    //----------------------------------------------------
    //テクスチャを用いた3角形を表示
        public function DrawBitmapPolygon3(
            bitmapData : BitmapData,
            a0 : Point, a1 : Point, a2 : Point, 
            b0 : Point, b1 : Point, b2 : Point ) : void
        {
	   var pol:Shape = new Shape();
            var matrix : Matrix = new Matrix();
            var ma : Matrix = new Matrix( a1.x - a0.x, a1.y - a0.y, a2.x - a0.x, a2.y - a0.y);
            ma.invert();
            matrix.translate(-a0.x, -a0.y);
            matrix.concat(ma);
            matrix.concat( new Matrix( b1.x - b0.x, b1.y - b0.y, b2.x - b0.x, b2.y - b0.y) );
            matrix.translate(b0.x, b0.y);
	  //-----------------------------------			
	   pol.graphics.beginBitmapFill(bitmapData, matrix);
            a0 = matrix.transformPoint(a0);
            a1 = matrix.transformPoint(a1);
            a2 = matrix.transformPoint(a2);
            pol.graphics.moveTo(a0.x, a0.y);
            pol.graphics.lineTo(a1.x, a1.y);
            pol.graphics.lineTo(a2.x, a2.y);
            pol.graphics.lineTo(a0.x, a0.y);
	   pol.graphics.endFill();
	   bd.draw( pol );
        }
    }
}

■「Main.as」はこのように記述しておきます。

package {
	import	flash.display.*;
	import	flash.geom.*;
	public	class Main extends Sprite {
		[Embed(source='sofi.jpg')]
		private var imageClass:Class;
		private var bData:Bitmap	= new imageClass();
		private	var g:Glib01	= new Glib01( 640, 480 );
		private	var po:Array;
		private	var uv:Array;
		//-------------------------------------
		//
		public	function	Main(){
			addChild( new Bitmap( g.GetBitmapData() ) );

			po	= new Array( 4 );
			uv	= new Array( 4 );
			po[ 0 ]	= new Point( 100,  50 );
			po[ 1 ]	= new Point( 350,  80 );
			po[ 2 ]	= new Point( 400, 300 );
			po[ 3 ]	= new Point(  50, 350 );
			
			uv[ 0 ]	= new Point(  0,    0 );
			uv[ 1 ]	= new Point( 256,   0 );
			uv[ 2 ]	= new Point( 256, 256 );
			uv[ 3 ]	= new Point(   0, 256 );
			
			g.Cls(0x8080ff);
			g.DrawBitmapPolygon3( bData.bitmapData, uv[ 0 ], uv[ 1 ], uv[ 2 ], po[ 0 ], po[ 1 ], po[ 2 ] );
			g.DrawBitmapPolygon3( bData.bitmapData, uv[ 0 ], uv[ 2 ], uv[ 3 ], po[ 0 ], po[ 2 ], po[ 3 ] );
			g.Print( 200, 50, "sample03");
		}
	}
}

■「sofi.jpg」のイメージファイルは256X256サイズの画像データです。

uv[ 0 ]	= new Point(  0,    0 );
uv[ 1 ]	= new Point( 256,   0 );
uv[ 2 ]	= new Point( 256, 256 );
uv[ 3 ]	= new Point(   0, 256 );

この部分ではUV値というよりか、テクスチャの座標をそのまま記述してください、
■この部分で表示する座標を登録します。

po[ 0 ]	= new Point( 100,  50 );
po[ 1 ]	= new Point( 350,  80 );
po[ 2 ]	= new Point( 400, 300 );
po[ 3 ]	= new Point(  50, 350 );

■これを実行すると。