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)
为什么我收到这个错误?
至少在当前版本的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)