Я следую инструкциям http://www.mbsoftworks.sk/tutorials/opengl3/ и пытаюсь скомпилировать 10-й пример.
Все отлично работает, кроме места, которое я отправляю (матрица проекции и матрица вида модели) в шейдер.
Есть место, куда я отправляю матрицу:
//...
// render.cpp
glm::mat4 projectionMatrix = *(oglControl->getProjectionMatrix());
glm::mat4 cam = glm::translate(mModelView, cCamera.vEye);
auto newM = projectionMatrix * cam;
spDirectionalLight.setUniform("projectionMatrixMulModelViewMatrix",&newM);
//...
//...
// setUniform implementation
void CShaderProgram::setUniform(string sName, glm::mat4* mMatrices, int iCount)
{
int iLoc = glGetUniformLocation(uiProgram, sName.c_str());
glUniformMatrix4fv(iLoc, iCount, FALSE, (GLfloat*)mMatrices);
}
//...
и в конце mMatrices содержат
].
Код шейдера
#version 330 core
uniform mat4 projectionMatrixMulModelViewMatrix;
uniform mat4 normalMatrix;
layout (location = 0) in vec3 inPosition;
layout (location = 1) in vec2 inCoord;
layout (location = 2) in vec3 inNormal;
out vec2 texCoord;
smooth out vec3 vNormal;
void main()
{
gl_Position = projectionMatrixMulModelViewMatrix*vec4(inPosition, 1.0);
texCoord = inCoord;
vec4 vRes = normalMatrix*vec4(inNormal, 0.0);
vNormal = vRes.xyz;
}
Результатом является пустой экран. Отладчик Renderdo c говорит мне, что матрица gl_position полностью NaN. Renderdo c screeenshot
Когда я отправляю glm :: mat4 (1), я получаю действительный результат.
Почему после умножения шейдер получает вектор NaN?