Я читал несколько (базовых) руководств по шейдерам. Пока что они рассказали, как устанавливать переменные в вашем шейдере. Но речь шла только о int, float или векторах. Я не могу найти ничего о том, как установить переменную mat4. Мой шейдер ожидает следующего:
uniform vec3 CameraPos;
uniform mat4 ModelWorld4x4;
Итак, положение камеры и мировая матрица модели. Думаю, у меня есть CameraPos, но как мне установить переменную ModelWorld4x4 ??
Вот как я установил vector3
campos = glGetUniformLocation(shader.id(), "CameraPos");
glUniform3f(campos, 0.0f, 0.0f, 3.0f);
Это (один из методов), как я пытался установить mat4
glGetFloatv(GL_MODELVIEW_MATRIX, modelworld);
modelw = glGetUniformLocation(shader.id(), "ModelWorld4x4");
glUniformMatrix4fv(g_modelworld4x4, modelworld); // Not working
Я использую библиотеку Assimp для загрузки модели, поэтому в настоящее время мировая матрица хранится в структуре aiMatrix4x4.
// world matrix of the model
aiMatrix4x4 m = nd->mTransformation;
// Save in a global variable
g_modelworld4x4 = m;