Униформа mat4 inputTransform
представляет собой матрицу 4 * 4, а не вектор с 4 компонентами.
См. Тип данных (GLSL) - Матрицы
Вы должны инициализировать еес массивом из 16 чисел с плавающей запятой, например, Матрица идентификации :
GLfloat trans[16] = {
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
};
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, trans);
Матрица содержит перевод, ориентацию (и масштаб).В GLSL mat4
может быть инициализирован:
mat4 m44 = mat4(
vec4( Xx, Xy, Xz, 0.0),
vec4( Yx, Xy, Yz, 0.0),
vec4( Zx Zy Zz, 0.0),
vec4( Tx, Ty, Tz, 1.0) );
Это означает, что если вы хотите инициализировать матрицу с вектором перевода, то вы можете сделать это вручную, инициализируя компонент перевода матрицы:
Glfloat Tx = 1.0;
Glfloat Ty = 0.0;
Glfloat Tz = 0.0;
GLfloat trans[16] = {
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
Tx, Ty, Tz, 1.0
};
В C ++ я рекомендую использовать библиотеку GLM для матричных и векторных операций, связанных с OpenGL и GLSL.