flagflag  If you want to see English page, please click "English" Button at Left.
void    CExKinectWnd::convertRot2SLData(int uid)
{
   Vector<double> vect;
   bool normal_joint[OPENNI_MAX_JOINT_NUM];

   //
   for (int j=1; j<OPENNI_MAX_JOINT_NUM; j++) {
       if (OpenNI2SLJointNum[j]>=0) {
           if (jointPositionConfidence((XnSkeletonJoint)j)>EXKINECT_WND_CONFIDENCE) { 
               XnVector3D  pos = jointPositionData((XnSkeletonJoint)j);
               posVect[j].set(-pos.Z, pos.X, pos.Y);
               prvVect[j] = posVect[j];
           }
           else {
               posVect[j] = prvVect[j];
           }
       }
   }


   // mPelvis
   posVect[0] = (posVect[17] + posVect[21])*0.5;
   vect = posVect[21] - posVect[17];
   double thz = atan2(-vect.x, vect.y);
   rotQuat[0].setRotation(thz, 0.0, 0.0, 1.0);
   if (!isCalibrated) setStartPosData(posVect[0]);


   //
   for (int j=1; j<OPENNI_MAX_JOINT_NUM; j++) {
       normal_joint[j] = true;

       if (OpenNI2SLJointNum[j]>=0) {
           if (jointRotationConfidence((XnSkeletonJoint)j)>EXKINECT_WND_CONFIDENCE) { 
               XnMatrix3X3 rot = jointRotationData((XnSkeletonJoint)j);
               double m11 = rot.elements[0];
               double m12 = rot.elements[1];
               double m13 = rot.elements[2];
               double m21 = rot.elements[3];
               double m31 = rot.elements[6];
               double m32 = rot.elements[7];
               double m33 = rot.elements[8];
               Vector<double> eul = RotMatrixElements2EulerXYZ(m11, m12, m13, m21, m31, m32, m33);
   
               Vector<double> vct(-eul.x, -eul.y, eul.z);    // Mirror: vct(-eul.x, eul.y, -eul.z);
               rotQuat[j].setEulerYZX(vct);
               prvQuat[j] = rotQuat[j];
           }
           else {
               rotQuat[j] = prvQuat[j];
           }
       }
   }


   // Leg
   rotQuat[22] = ~rotQuat[21]*rotQuat[22];
   rotQuat[18] = ~rotQuat[17]*rotQuat[18];

   // Right Hand
   rotQuat[13] = ~rotQuat[12]*rotQuat[13];
   rotQuat[12] = ~rotQuat[ 2]*rotQuat[12];

   // Left Hand
   rotQuat[ 7] = ~rotQuat[ 6]*rotQuat[ 7];
   rotQuat[ 6] = ~rotQuat[ 2]*rotQuat[ 6];

   rotQuat[ 2] = ~rotQuat[ 3]*rotQuat[ 2];
   rotQuat[ 3] = ~rotQuat[ 0]*rotQuat[ 3];


   // Set to Shared Memory
   for (int j=1; j<OPENNI_MAX_JOINT_NUM; j++) {
       int n = OpenNI2SLJointNum[j];
       if (n>=0 && normal_joint[j]) {
           double* shm = theApp.ptrShm[n];
           if (shm!=NULL) {
               shm[4] = rotQuat[j].x;
               shm[5] = rotQuat[j].y;
               shm[6] = rotQuat[j].z;
               shm[7] = rotQuat[j].s;
           }
       }
   }

   // mPelvis(0)
   double* shm = theApp.ptrShm[0];
   if (shm!=NULL) {
       shm[1] = (posVect[0].x - startPos.x)/1000.;
       shm[2] = (posVect[0].y - startPos.y)/1000.;
       shm[3] = (posVect[0].z - startPos.z)/1000.;
       shm[4] = rotQuat[0].x;
       shm[5] = rotQuat[0].y;
       shm[6] = rotQuat[0].z;
       shm[7] = rotQuat[0].s;
   }
}

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom
Counter: 962, today: 1, yesterday: 0
最終更新: 2011-12-15 (木) 21:44:41 (JST) (4506d) by admin

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 4月翌月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
<今日>

オンライン状況

33 人のユーザが現在オンラインです。 (4 人のユーザが xpwiki を参照しています。)

登録ユーザ: 0
ゲスト: 33

もっと...

アクセスカウンタ

今日 : 1287128712871287
昨日 : 5280528052805280
総計 : 2326244123262441232624412326244123262441232624412326244123262441
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com