新 3D クラス開発日記(17) ~ 面を使った 3D 表現<4> Zlight ~
2007/03/01 20:53 - AS3.0
続いて ZlightSkin を使った 3D 表現の話です。
Zlgiht
Surface 同様、面を塗りつぶすことで 3D 表現を実現しますが、こちらは面の Z 座標に応じて塗りつぶす色の明暗を変えます。
その結果 lineTo を使わずに 3D 表現が可能になります。
Aq3D.skin.ZlightSkin の render メソッドの構造も基本的に Wire や Surface と同じですが、poligon.face.graphics.clear(); 以前に、面を塗りつぶす色の計算をおこなう過程が付け加わっています。
public function render( vp:Number ):void { // 面の色を調整 var diff:Number = ( poligon.transCoordinate.z * flg ) / range; var rgb:Object = ColorMath.hex2rgb( color ); var r:uint = Math.floor( rgb.r * ( 1 + diff ) ); var g:uint = Math.floor( rgb.g * ( 1 + diff ) ); var b:uint = Math.floor( rgb.b * ( 1 + diff ) ); var newColor:uint = ColorMath.rgb2hex( r , g , b ); poligon.face.graphics.clear(); ・ ・ ・ 以下 Wire や Surface と同様 }
また Zlight は Wire や Surface と比べて、スキンのコンストラクタ生成時に必要とするスキンタイプ別変数 info の中身が少し異なります。
Wire や Surface では、 線の色や太さ、面の色などといった、lineTo や beginFill のパラメータのみがその対象でした。
この Zlight では beginFill 用の値に加え、以下の二つが必要となります。
- range
- 面の Z 座標が取り得る範囲を指定する
- Vertex の引数 Vector を設定するときに使用した DIST の値を基準にした値。
- flg
- 色変更の種別を設定する
- 1 : 手前が暗く、奥が明るい。
- -1 : 手前が明るく、奥が暗い。
- 1 : 手前が暗く、奥が明るい。
面の色:0x009966
面のアルファ値:1 range:DIST*2 flg:1 |
面の色:0x009966
面のアルファ値:1 range:DIST*2 flg:-1 |
面の色:0x9966CC
面のアルファ値:1 range:DIST*2 flg:1 |
面の色:0x9966CC
面のアルファ値:1 range:DIST*2 flg:-1 |
- ソース( zlight.zip 25.2 KB )