从三个已知点获得变换矩阵

时间:2012-04-11 13:51:01

标签: matrix transformation pitch

我有三个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模型旋转时,它似乎总是以相同的角度倾斜。

我的问题是。我将如何分别计算滚动和俯仰,所以我可以在哪里倾斜以及如何修复它。

THX。 第

0 个答案:

没有答案
相关问题