private void Uninitialize() { if (senseManager != null) { senseManager.Dispose(); senseManager = null; } if (tracker != null) { tracker.Dispose(); tracker = null; } }
private void UpdateObjectTraking() { // キャンバスをクリアする CanvasPoint.Children.Clear(); // 追跡しているすべてのオブジェクトを表示する PXCMTracker.TrackingValues[] trackingValues; tracker.QueryAllTrackingValues(out trackingValues); foreach (var trackData in trackingValues) { if (PXCMTracker.IsTracking(trackData.state)) { ShowTrackingValue(trackData); } } }
// オブジェクトトラッカー関連の初期化 private void InitializeObjectTracking() { // オブジェクトトラッカーを取得する tracker = senseManager.QueryTracker(); if (tracker == null) { throw new Exception("オブジェクトトラッカーの取得に失敗しました"); } // 追跡する画像を設定 var sts = tracker.Set2DTrackFromFile(@"targetEarth.jpg", out targetId); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("追跡する画像の設定に失敗しました"); } }
// オブジェクトトラッカー関連の初期化 private void InitializeObjectTracking() { // オブジェクトトラッカーを取得する tracker = senseManager.QueryTracker(); if (tracker == null) { throw new Exception("オブジェクトトラッカーの取得に失敗しました"); } // インスタントトラックを設定 var sts = tracker.Set3DInstantTrack(true, 30); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("追跡する画像の設定に失敗しました"); } }
private void UpdateObjectTraking() { // キャンバスをクリアする CanvasPoint.Children.Clear(); // 追跡しているオブジェクトを取得する PXCMTracker.TrackingValues trackData; var sts = tracker.QueryTrackingValues(targetId, out trackData); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { return; } // 追跡していたら表示する if (PXCMTracker.IsTracking(trackData.state)) { ShowTrackingValue(trackData); } }
private void UpdateObjectTraking() { // キャンバスをクリアする CanvasPoint.Children.Clear(); // 追跡しているオブジェクトを表示する foreach (int id in targetIds) { PXCMTracker.TrackingValues trackData; var sts = tracker.QueryTrackingValues(id, out trackData); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { continue; } if (PXCMTracker.IsTracking(trackData.state)) { ShowTrackingValue(trackData); } } }
// オブジェクトトラッカー関連の初期化 private void InitializeObjectTracking() { // オブジェクトトラッカーを取得する tracker = senseManager.QueryTracker(); if (tracker == null) { throw new Exception("オブジェクトトラッカーの取得に失敗しました"); } // 追跡する画像を設定 int firstId = 0, lastId = 0; var sts = tracker.Set3DTrack(@"target.slam", out firstId, out lastId); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("追跡するオブジェクトの設定に失敗しました"); } for (int i = firstId; i <= lastId; i++) { targetIds.Add(i); } }
private void ShowTrackingValue( PXCMTracker.TrackingValues arrData ) { // for the middleware being a left hand coordinate system. float depthnum = 630; //correction values for translation and movement dependent on z values float depthcorrectionfactor = (arrData.translation.z / depthnum); arrData.translation.x = arrData.translation.x / depthcorrectionfactor; arrData.translation.y = arrData.translation.y / depthcorrectionfactor; var translation = arrData.translation; arrData.translation.y = -arrData.translation.y; arrData.translation.x += COLOR_WIDTH / 2; arrData.translation.y += COLOR_HEIGHT / 2; // 中心点を表示する AddEllipse( CanvasPoint, new Point( arrData.translation.x, arrData.translation.y ), 5, Brushes.Blue, -1 ); //3x1 points for scaling PXCMPoint3DF32 trans1; PXCMPoint3DF32 trans2; PXCMPoint3DF32 trans3; //changes the size of the arrows int scalefactor = 150000; //150000 float height = scalefactor / translation.z; float width = scalefactor / translation.z; float depth = scalefactor / translation.z; //creates the point vectors trans1.x = width; trans2.x = 0; trans3.x = 0; trans1.y = 0; trans2.y = height; trans3.y = 0; trans1.z = 0; trans2.z = 0; trans3.z = depth; PXCMPoint4DF32 rot = arrData.rotation; //put into 3x1 vector point for matrix multiplication purposes PXCMPoint3DF32 q; q.x = rot.x; q.y = rot.y; q.z = rot.z; float s = rot.w; /**--determine the degrees of rotation and display to screen-- **/ //converts quaternion values to degrees double heading; double attitude; double bank; float sqw = s*s; float sqx = q.x*q.x; float sqy = q.y*q.y; float sqz = q.z*q.z; float unit = sqx + sqy + sqz + sqw; float check = q.x*q.y + q.z*s; float rad2deg = 180 / (float)Math.PI; heading = Math.Atan2( 2 * q.y*s - 2 * q.x*q.z, sqx - sqy - sqz + sqw ) * rad2deg; attitude = Math.Asin( 2.0*check / unit ) * rad2deg; bank = Math.Atan2( 2 * q.x*s - 2 * q.y*q.z, -sqx + sqy - sqz + sqw ) * rad2deg; /** rotations with matrix multiplication **/ PXCMPoint3DF32 prime1; PXCMPoint3DF32 prime2; PXCMPoint3DF32 prime3; float[][] rotmat = new float[3][]; rotmat[0] = new float[3]; rotmat[1] = new float[3]; rotmat[2] = new float[3]; //rotation matrix using quaternion values rotmat[0][0] = (1 - (2 * (q.y*q.y)) - (2 * (q.z*q.z))); rotmat[0][1] = ((2 * q.x*q.y) - (2 * s*q.z)); rotmat[0][2] = ((2 * q.x*q.z) + (2 * s*q.y)); rotmat[1][0] = ((2 * q.x*q.y) + (2 * s*q.z)); rotmat[1][1] = (1 - (2 * q.x*q.x) - (2 * q.z*q.z)); rotmat[1][2] = ((2 * q.y*q.z) - (2 * s*q.x)); rotmat[2][0] = ((2 * q.x*q.z) - (2 * s*q.y)); rotmat[2][1] = ((2 * q.y*q.z) + (2 * s*q.x)); rotmat[2][2] = (1 - (2 * q.x*q.x) - (2 * q.y*q.y)); //rotation for x point prime1.x = (rotmat[0][0] * trans1.x) + (rotmat[0][1] * trans1.y) + (rotmat[0][2] * trans1.z); prime1.y = (rotmat[1][0] * trans1.x) + (rotmat[1][1] * trans1.y) + (rotmat[1][2] * trans1.z); prime1.z = (rotmat[2][0] * trans1.x) + (rotmat[1][2] * trans1.y) + (rotmat[2][2] * trans1.z); //rotation for y point prime2.x = (rotmat[0][0] * trans2.x) + (rotmat[0][1] * trans2.y) + (rotmat[0][2] * trans2.z); prime2.y = (rotmat[1][0] * trans2.x) + (rotmat[1][1] * trans2.y) + (rotmat[1][2] * trans2.z); prime2.z = (rotmat[2][0] * trans2.x) + (rotmat[1][2] * trans2.y) + (rotmat[2][2] * trans2.z); //rotation for z point prime3.x = (rotmat[0][0] * trans3.x) + (rotmat[0][1] * trans3.y) + (rotmat[0][2] * trans3.z); prime3.y = (rotmat[1][0] * trans3.x) + (rotmat[1][1] * trans3.y) + (rotmat[1][2] * trans3.z); prime3.z = (rotmat[2][0] * trans3.x) + (rotmat[1][2] * trans3.y) + (rotmat[2][2] * trans3.z); // 各座標の向きを表示する AddLine( CanvasPoint, new Point( arrData.translation.x, arrData.translation.y ), new Point( arrData.translation.x + prime1.x, arrData.translation.y - prime1.y ), Brushes.Red ); AddLine( CanvasPoint, new Point( arrData.translation.x, arrData.translation.y ), new Point( arrData.translation.x + prime2.x, arrData.translation.y - prime2.y ), Brushes.Green ); AddLine( CanvasPoint, new Point( arrData.translation.x, arrData.translation.y ), new Point( arrData.translation.x + prime3.x, arrData.translation.y - prime3.y ), Brushes.Blue ); }
// オブジェクトトラッカー関連の初期化 private void InitializeObjectTracking() { // オブジェクトトラッカーを取得する tracker = senseManager.QueryTracker(); if ( tracker == null ) { throw new Exception( "オブジェクトトラッカーの取得に失敗しました" ); } // インスタントトラックを設定 var sts = tracker.Set3DInstantTrack( true, 30 ); if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) { throw new Exception( "追跡する画像の設定に失敗しました" ); } }
private void Uninitialize() { if ( senseManager != null ) { senseManager.Dispose(); senseManager = null; } if ( tracker != null ) { tracker.Dispose(); tracker = null; } }
// オブジェクトトラッカー関連の初期化 private void InitializeObjectTracking() { // オブジェクトトラッカーを取得する tracker = senseManager.QueryTracker(); if ( tracker == null ) { throw new Exception( "オブジェクトトラッカーの取得に失敗しました" ); } // 追跡する画像を設定 var sts = tracker.Set2DTrackFromFile( @"targetEarth.jpg", out targetId ); if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) { throw new Exception( "追跡する画像の設定に失敗しました" ); } }
// オブジェクトトラッカー関連の初期化 private void InitializeObjectTracking() { // オブジェクトトラッカーを取得する tracker = senseManager.QueryTracker(); if ( tracker == null ) { throw new Exception( "オブジェクトトラッカーの取得に失敗しました" ); } // 追跡する画像を設定 int firstId = 0, lastId = 0; var sts = tracker.Set3DTrack( @"target.slam", out firstId, out lastId ); if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) { throw new Exception( "追跡するオブジェクトの設定に失敗しました" ); } for ( int i = firstId; i <= lastId; i++ ) { targetIds.Add( i ); } }