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 );