我正在尝试创建一个简单的矩阵以在我的着色器中使用(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
)
为什么我收到此错误?
答案 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));