GLM 功能不起作用

use*_*779 2 c++ opengl opengl-3 glm-math

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

这是我尝试做的一件事:

glm::mat4 scaleMatrix = glm::scale(2.0f, 2.0f, 2.0f);
Run Code Online (Sandbox Code Playgroud)

不幸的是,编译器(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>&)
Run Code Online (Sandbox Code Playgroud)

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

GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> scale
        (
        detail::tmat4x4<T, P> const & m,
        detail::tvec3<T, P> const & v
        )
Run Code Online (Sandbox Code Playgroud)

为什么我收到这个错误?

BDL*_*BDL 7

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

您的代码示例的正确解决方案是(根据此处)是

glm::mat4 scaleMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(2.0f, 2.0f, 2.0f));
Run Code Online (Sandbox Code Playgroud)

编辑:我只是偶然发现了这个页面,看起来好像在 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));  
Run Code Online (Sandbox Code Playgroud)