5

我正在尝试在 glm 中使用四元数来做 slerp。我在用

glm::quat interpolatedquat = quaternion::mix(quat1,quat2,0.5f)

这些是我添加的库

#include <glm/gtc/quaternion.hpp>
#include <glm/gtx/quaternion.hpp>
#include <glm/gtx/euler_angles.hpp>
#include <glm/gtx/norm.hpp>
#include <glm\glm.hpp>
#include <glm\glm\glm.hpp>
using namespace glm;

但我无法让它工作。我添加了所有glm四元数.hpp

错误是“四元数”必须是类名或命名空间。

4

1 回答 1

12

搜索 GLM 0.9.4.6 中的所有文件以查找namespace quaternionquaternion::仅产生一行gtc/quaternion.hpp已被注释掉的行。所有公共 GLM 功能都直接在glm命名空间中实现。实现细节glm::detail偶尔存在glm::_detail,但你不应该直接在这些命名空间中使用任何东西,因为它们在未来的版本中可能会发生变化。

不使用每个模块/扩展的子命名空间。因此,您只需要:

glm::quat interpolatedquat = glm::mix(quat1,quat2,0.5f)

你可能想要一个分号在最后。

编辑:您可能还想使用glm::slerp,而不是glm::mix因为它有一个额外的检查以确保采用最短路径:

// If cosTheta < 0, the interpolation will take the long way around the sphere. 
// To fix this, one quat must be negated.
if (cosTheta < T(0))
{
    z        = -y;
    cosTheta = -cosTheta;
}

这在版本中不存在,mix其他方面是相同的。

于 2013-10-20T06:22:37.650 回答