С GLM-сайта :
GLM предоставляет классы и функции, разработанные и реализованные с теми же соглашениями и функциями именования, что и GLSL
И GLSL spec
Если в конструкторе матрицы имеется один скалярный параметр, он используется для инициализации всех компонентов по диагонали матрицы, а остальные компоненты инициализируются равными 0,0.
Итак, glm::mat4()
- это матрица со всеми нулями, а glm::mat4(1)
- это единичная матрица.
В версиях GLM до 0.9.9 вы можете найти в type_mat4x4.inl
# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
template <typename T, precision P>
GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4()
{
# ifndef GLM_FORCE_NO_CTOR_INIT
this->value[0] = col_type(1, 0, 0, 0);
this->value[1] = col_type(0, 1, 0, 0);
this->value[2] = col_type(0, 0, 1, 0);
this->value[3] = col_type(0, 0, 0, 1);
# endif
}
# endif
И это изменилось в 0.9.9
# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE
template<typename T, qualifier Q>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat()
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST
: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}
# endif
{
# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION
this->value[0] = col_type(1, 0, 0, 0);
this->value[1] = col_type(0, 1, 0, 0);
this->value[2] = col_type(0, 0, 1, 0);
this->value[3] = col_type(0, 0, 0, 1);
# endif
}
# endif
Другими словами: GLM позволяет и всегда разрешал изменять инициализацию GLSL по умолчанию, играя с некоторыми #define
s.Если нет, glm::mat4()
всегда будет со всеми нулями.