/* 非同期イベントハンドラ * CaptureDeviceからのイベントをハンドリングして、バッファとテクスチャを更新する。 */ public void onSample(WmCapture i_sender, INySample i_sample) { int w = SCREEN_WIDTH; int h = SCREEN_HEIGHT; int s = w * h; Thread.Sleep(0); lock (this) { //カメラ映像をARのバッファにコピー this._reality_source.setWMCaptureSample(i_sample.GetData(), i_sender.vertical_flip); this._reality.progress(this._reality_source); //テクスチャ内容を更新 this._back_ground.CopyFromRaster((DsRGB565Raster)this._reality_source.refRgbSource()); //UnknownTargetを1個取得して、遷移を試す。 NyARRealityTarget t = this._reality.selectSingleUnknownTarget(); if (t == null) { return; } //ターゲットに一致するデータを検索 ARTKMarkerTable.GetBestMatchTargetResult r = new ARTKMarkerTable.GetBestMatchTargetResult(); if (this._mklib.getBestMatchTarget(t, this._reality_source, r)) { if (r.confidence < 0.5) { //一致率が低すぎる。 return; } //既に認識しているターゲットの内側のものでないか確認する?(この処理をすれば、二重認識は無くなる。) //一致度を確認して、80%以上ならKnownターゲットへ遷移 if (!this._reality.changeTargetToKnown(t, r.artk_direction, r.marker_width)) { //遷移の成功チェック return;//失敗 } //遷移に成功したので、tagにResult情報をコピーしておく。(後で表示に使う) t.tag = r; } else { //一致しないので、このターゲットは捨てる。 this._reality.changeTargetToDead(t, 10); } } return; }
/* 非同期イベントハンドラ * CaptureDeviceからのイベントをハンドリングして、バッファとテクスチャを更新する。 */ public void onSample(WmCapture i_sender, INySample i_sample) { lock (this) { IntPtr data = i_sample.GetData(); this.m_raster.setBuffer(data, i_sender.vertical_flip); //テクスチャ内容を更新 this._back_ground.CopyFromRaster(this.m_raster); //マーカーは見つかったかな? is_marker_enable = this.m_ar.detectMarkerLite(this.m_raster, 110); if (is_marker_enable) { //あればMatrixを計算 this.m_ar.getTransmationMatrix(trans_result); NyARD3dUtil.toD3dCameraView(trans_result, 1, ref trans_matrix); } } Thread.Sleep(0); return; }
/* 非同期イベントハンドラ * CaptureDeviceからのイベントをハンドリングして、バッファとテクスチャを更新する。 */ public void onSample(WmCapture i_sender, INySample i_sample) { lock (this) { IntPtr data=i_sample.GetData(); this.m_raster.setBuffer(data, i_sender.vertical_flip); //テクスチャ内容を更新 this._back_ground.CopyFromRaster(this.m_raster); //マーカーは見つかったかな? is_marker_enable = this.m_ar.detectMarkerLite(this.m_raster, 110); if (is_marker_enable) { //あればMatrixを計算 this.m_ar.getTransmationMatrix(trans_result); NyARD3dUtil.toD3dCameraView(trans_result,1, ref trans_matrix); } } Thread.Sleep(0); return; }