【问题标题】:GLM functions not workingGLM 功能不起作用
【发布时间】:2014-12-18 12:18:28
【问题描述】:

我正在尝试创建一个简单的矩阵以在我的着色器中使用(OpenGL 3.x 的新功能),但是,我收到了来自 GLM 的错误。

这是我尝试做的一件事:

glm::mat4 scaleMatrix = glm::scale(2.0f, 2.0f, 2.0f);

不幸的是,编译器(MinGW)给了我错误:

error: no matching function for call to 'scale(float, float, float)'
candiate is:
template<class T, glm::precision P> glm::detail::tmat4x4<T, P> glm::scale(const   
glm::detail::tmat4x4<T, P>&, const glm::detail::tvec3<T, P>&)

当我点击 IDE 中的错误时,它会将我带到“matrix_transform.inl”中的第一行:

GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> scale
        (
        detail::tmat4x4<T, P> const & m,
        detail::tvec3<T, P> const & v
        )

为什么会出现此错误?

【问题讨论】:

    标签: c++ opengl opengl-3 glm-math


    【解决方案1】:

    至少在当前版本的glm (0.9.6) 中没有将三个浮点数作为参数的 glm::scale 函数。只有一个重载需要一个矩阵,该矩阵应该被缩放一个包含缩放因子的向量。

    您的代码示例的正确解决方案是 (according to here)

    glm::mat4 scaleMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(2.0f, 2.0f, 2.0f));
    

    编辑:我刚刚偶然发现this page,看起来好像在 0.9.4 中出现了 glm:scale(float,float,float) 重载。

    编辑:正如 sajas 所指出的,glm::scale 函数还有第二个重载可用。这个只需要一个 glm::vec3 并且可能是您正在寻找的更多内容。

    glm::mat4 scaleMatrix = glm::scale(glm::vec3(2.0f, 2.0f, 2.0f));  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2021-08-27
      • 2013-01-31
      • 2013-01-17
      • 2020-09-04
      • 2017-04-14
      相关资源
      最近更新 更多