Если у кого-то есть подсказка, спасибо.
Умножение матриц в шейдере OpenGL выглядит следующим образом:
gl_Position = projectionMat*modelViewMat*vec4(inPos, 1.0);
inPos - позиция вершины vec3.
Если вам нужно больше матриц (стиль DirectX), вам придется использовать
gl_Position = projectionMat*viewMat*worldMat*vec4(inPos, 1.0);
В идеале матрицы должны быть извлечены из OpenGL, и проекция не должна быть преобразованием идентичности. Используйте gluOrtho2D, если вам нужна 2D-графика.
Также вы можете случайно транспонировать или забыть транспонировать матрицы при загрузке их в униформу.
В любом случае, если у вас возникли проблемы с шейдерами, сначала напишите приложение, которое будет рендерить вещи без шейдеров, затем запишите шейдер и загрузите матрицы преобразования из OpenGL, а затем преобразуйте его (если вам это нужно) в пользовательские процедуры вычисления матриц.
В зависимости от версии OpenGL у вас может быть доступна функция GLSL ftransform (), которая еще больше упростит ситуацию.