假设我有一个对象,该对象有一个四元数来表示它的方向。
目前,我可以在没有万向节锁定的情况下在所有3个轴上旋转,但是,任何轴上的每个旋转应该旋转其他2个旋转轴。
我的意思是,如果我将一个物体朝向相机倾斜,但是然后将物体偏转90度,投掷物体仍将相对于之前的位置旋转,而不是现在的位置。
以下是我的问题的视觉示例:
我使用四元数而不是欧拉旋转,因为这些物体可以在所有3个轴上旋转,而我不想要万向锁/达到奇点
我像这样旋转对象的方向四元数:
orientation = Quaternion(Vector(0,1,0),angle) * orientation;
然后我触发重建对象的向量,并将其应用于它们(在相对于3D空间原点转换对象之后):
Quaternion Point = Quaternion(( orientation * (Vertex) ) * (orientation.inverse()));
vertices[x] = QVector3D(round(Point.v.x),round(Point.v.y),round(Point.v.z));
当我将四元数乘以其他四元数时,这就是乘法运算符的函数:
Quaternion Quaternion::operator*(Quaternion& q) const
{
Quaternion r;
//"w" is the angle, "v" is the vector
r.w = w*q.w - glm::dot(v, q.v);
r.v = v*q.w + q.v*w + glm::cross(v,q.v);
//r.normalize();
return r;
}
我向上帝发誓,我只是张贴,因为这个话题令我困惑不已。巩固这个系统将使我非常高兴。