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 quaternion .hpp を追加しました

エラーは、「四元数」はクラス名または名前空間でなければなりません。

4

1 に答える 1

12

GLM 0.9.4.6 のすべてのファイルを検索すると、コメント アウトされた 1 行だけが得られnamespace quaternionます。すべてのパブリック GLM 機能は、名前空間に直接実装されています。実装の詳細はおよび にある場合がありますが、これらの名前空間は将来のバージョンで変更される可能性があるため、直接使用しないでください。quaternion::gtc/quaternion.hppglmglm::detailglm::_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 に答える