我有三个 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 模型旋转时,它似乎总是以相同的角度倾斜。
我的问题是。我将如何分别计算滚动和俯仰,这样我就可以知道它在哪里下降以及如何修复它。
谢谢。s。