2013-10-20 74 views
2

我想用glm中的四元數做斯萊普。 我使用Glm quaternion 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的

錯誤是「quaternion」必須是類名或命名空間。

+0

」無法讓它工作「......它是否存在問題?刪除你的主目錄? – genpfault

+0

@genpfault嘿人對不起添加了我得到的錯誤 – james456

+0

@genpfault我試過glm ::但它似乎並沒有解決它 – james456

回答

5

搜索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版本,否則相同。 「