我在 3D 空间中有两个相同类型的对象(使用 OpenGL 来渲染它们)。这些对象存储 xyz 偏移和代表标准 4x4 旋转矩阵的旋转矩阵。
一个精简的例子:
class object {
float rotMatrix[16];
float xyzTrans[3];
//a displaylist for drawing the object
}
我将 GLUI 用于 UI 控件,这使得以格式存储转换非常简单。
问题: 我需要为一个对象相对于另一个对象定义一个“正确”的方向。例如,如果第一个对象直接面向 z 轴,而第二个对象相同但也围绕 x 轴旋转了大约 45 度,则这将被视为“正确”并且我的函数会执行它们需要做的事情. 当然,这可能会有所不同,可能是相同的 z 但在 x 和 y 上旋转,或者甚至可能围绕每个轴旋转一点。“正确”旋转的定义将存储在对象中以供比较。
理想情况下,我希望做类似的事情:
bool checkRotation(object* first, object* second) {
//do some comparison stuff
if (eachCheck < someTolerance)
return true;
return false;
}
这可以通过比较两个旋转矩阵来实现吗?我需要转换为四元数并使用它们吗?
这个问题是我发现的最接近我所问的问题,但它的不同足以令人困惑。