ASだけなんだけども、いちおうFlexタグつけておこう。
実はちゃんとASを読んだのって初めて(ぁ
結構ifでハードコーディングしちゃってるから、もっと綺麗に書けるんだろうなーと思いつつも
初めて書くから許してほしい(ぁw
FLARToolKitでDAEオブジェクトをマルチマーカーで表示しました。
マルチマーカーのサンプルとか3Dのサンプルとかはいっぱいあるんだけども
両方やってるのってなかったのよねー。
メインのソースをぺたり。
package { import flash.events.Event; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import com.squidder.flar.FLARMarkerObj; import com.squidder.flar.PVFLARBaseApplication; import com.squidder.flar.events.FLARDetectorEvent; import org.papervision3d.objects.parsers.DAE; public class MultiFLARExample extends PVFLARBaseApplication { private var _miku0:DAE; private var _miku1:DAE; private var _miku2:DAE; private var _miku3:DAE; private var _cubes : Array; private var _lightPoint : PointLight3D; public function MultiFLARExample() { _cubes = new Array(); _markers = new Array(); _markers.push( new FLARMarkerObj( "assets/flar/crash.pat" , 16 , 50 , 80 ) ); _markers.push( new FLARMarkerObj( "assets/flar/kickdrum.pat" , 16 , 50 , 80 ) ); _markers.push( new FLARMarkerObj( "assets/flar/ride.pat" , 16 , 50 , 80 ) ); _markers.push( new FLARMarkerObj( "assets/flar/snare.pat" , 16 , 50 , 80 ) ); super( ); } override protected function _init( event : Event ) : void { super._init( event ); _lightPoint = new PointLight3D( ); _lightPoint.y = 1000; _lightPoint.z = -1000; } override protected function _detectMarkers() : void { _resultsArray = _flarDetector.updateMarkerPosition( _flarRaster , 80 , .5 ); for ( var i : int = 0 ; i < _resultsArray.length ; i ++ ) { var subResults : Array = _resultsArray[ i ]; for ( var j : * in subResults ) { _flarDetector.getTransmationMatrix( subResults[ j ], _resultMat ); if ( _cubes[ i ][ j ] != null ) transformMatrix( _cubes[ i ][ j ] , _resultMat ); } } } override protected function _handleMarkerAdded( event : FLARDetectorEvent ) : void { _addCube( event.codeId , event.codeIndex ); } override protected function _handleMarkerRemove( event : FLARDetectorEvent ) : void { _removeCube( event.codeId , event.codeIndex ); } private function _addCube( id:int , index:int ) : void { if ( _cubes[ id ] == null ){ _cubes[ id ] = new Array(); } if ( _cubes[ id ][ index ] == null ) { var dispObj : DisplayObject3D = new DisplayObject3D(); if(id == 0){ this._miku0 = new DAE(); this._miku0.load('negimiku.dae'); this._miku0.scale = 20; this._miku0.rotationX = 90; this._miku0.rotationZ = 90; this._miku0.z = 9.68721 * 5; dispObj.addChild( this._miku0 ); //snd.play(); } if(id == 1){ this._miku1 = new DAE(); this._miku1.load('negimiku.dae'); this._miku1.scale = 10; this._miku1.rotationX = 90; this._miku1.rotationZ = 90; this._miku1.z = 9.68721 * 5; dispObj.addChild( this._miku1 ); } if(id == 2){ this._miku2 = new DAE(); this._miku2.load('negimiku.dae'); this._miku2.scale = 5; this._miku2.rotationX = 90; this._miku2.rotationZ = 90; this._miku2.z = 9.68721 * 5; dispObj.addChild( this._miku2 ); } if(id == 3){ this._miku3 = new DAE(); this._miku3.load('negimiku.dae'); this._miku3.scale = 1; this._miku3.rotationX = 90; this._miku3.rotationZ = 90; this._miku3.z = 9.68721 * 5; dispObj.addChild( this._miku3 ); } _cubes[ id ][ index ] = dispObj; _baseNode.addChild( dispObj ); } _baseNode.addChild( _cubes[ id ][ index ] ); } private function _removeCube( id:int , index:int ) : void { if ( _cubes[ id ] == null ) _cubes[ id ] = new Array(); if ( _cubes[ id ][ index ] != null ) { _baseNode.removeChild( _cubes[ id ][ index ] ); } } } }
さてと、次はマーカーが表示されたときに音を鳴らしたいんだけど、どうすればいいんだろう。
また試行錯誤かーw