簡體   English   中英

glm :: dot()不返回float / double值?

[英]glm::dot() doesn't return float/double value?

我正在嘗試使用glm::dot來計算兩個glm::dvec3的點積

但是,當我嘗試執行此操作時,我的編譯器將返回此錯誤

#include <glm/glm.hpp>

int main(int argc, char* argv[]){
    glm::dvec3 a = glm::dvec3(1f, 2f, 3f);
    glm::dvec3 b = glm::dvec3(4f, 5f, 6f);
    float weight = glm::dot(a, b)
}

錯誤:當我將權重分配給glm :: dot的結果時,在最后一行Type 'double' and 'glm::dvec3' are not compatible

我正在使用(clion,cygwin,gcc)和glm 0.9.8和c ++ 11

編輯:添加更多詳細的錯誤位置和代碼上下文

也許有更好的解決方案,但這對我有用

glm::vec3 a;
glm::vec3 b;
glm::dot<3, float, glm::qualifier::highp>(a, b);

由於GLM有兩種方法

template<typename T>
GLM_FUNC_QUALIFIER T dot(T x, T y)
{
    GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
    return x * y;
}
template<length_t L, typename T, qualifier Q>
GLM_FUNC_QUALIFIER T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
{
    GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
    return detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);
}

編譯器假設T為vec3,因此使用第一種方法

看一下這篇文章:

模板C ++

在將通用類型T用作GetMax的參數的特定情況下,編譯器可以自動找出必須實例化的數據類型,而不必在尖括號中明確指定它(就像我們在指定and之前所做的那樣)。 所以我們可以這樣寫:int i,j; GetMax(i,j);

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM