私は 3 つの 3d (x、y、z) ポイントを持っています。kinect でオブジェクトの角を追跡して取得します。
それに応じて 3D モデルを移動および回転させたいと考えています。
私はこれを行うことでロールとピッチを取得します: (私はopenframeworks.ccを使用しているため、一部のクラスメソッドは人々にとって奇妙に見えるかもしれません)
ofVec3f v10 = pointB - pointA;
ofVec3f v20 = pointC - pointA;
v10.normalize();
v20.normalize();
//create rotation matrix for roll+pitch relative to up vector 0,0,1
ofVec3f normaleVec = v10.crossed(v20);
ofVec3f fromVec = ofVec3f(0,0,1);
ofVec3f toVec = normaleVec;
mMR0.makeRotationMatrix(fromVec,toVec);
見出し/ヨーを取得するには、次のようにします: ofVec3f myV0_flat = avePointA*mMR0.getInverse(); ofVec3f myV1_flat = avePointB*mMR0.getInverse();
//get points relative to origion
ofVec3f myV10_flat = myV1_flat - myV0_flat;
//create rotation matrix for heading relative to flat 2d plane
float angle = atan2(myV10_flat.x,myV10_flat.y)/M_PI*180;
mMR1.makeRotationMatrix(angle,fromVec);
最後に翻訳行列を作成し、すべての行列を結合します。
mMT1.makeTranslationMatrix(avePointD); //translate from origin
ofMatrix4x4 mMc;
mMc = mMR0 * mMR1 * mMT1;
しかし、私の 3D モデルが回転すると、常に同じ角度で沈むように見えます。
私の質問はです。ロールとピッチを別々に計算する方法を教えてください。
どうも。秒。