GLM功能不起作用

时间:2014-12-18 12:18:28

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

我正在尝试创建一个简单的矩阵以在我的着色器中使用(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中的错误时,它会转到下面的第一行&#34; matrix_transform.inl&#34;:

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

为什么我收到此错误?

1 个答案:

答案 0 :(得分:4)

至少在当前版本的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));