Exemple #1
0
        private void Uninitialize()
        {
            if (senseManager != null)
            {
                senseManager.Dispose();
                senseManager = null;
            }

            if (tracker != null)
            {
                tracker.Dispose();
                tracker = null;
            }
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        // オブジェクトトラッカー関連の初期化
        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("追跡する画像の設定に失敗しました");
            }
        }
Exemple #4
0
        // オブジェクトトラッカー関連の初期化
        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("追跡する画像の設定に失敗しました");
            }
        }
Exemple #5
0
        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 );
            }
        }