Как передать матрицы View/Model/Projection в мой вершинный шейдер в OpenGL ES 2.0?
В OpenGL ES 2.0 вы, очевидно, не можете сделать
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
больше, чтобы установить матрицу модели, но я думаю, что эти матрицы все еще как-то встроены, так как спецификация GLSL говорит вам, как получить к ним доступ в вершинном шейдере.
//
// Matrix state. p. 31, 32, 37, 39, 40.
//
uniform mat4 gl_ModelViewMatrix;
uniform mat4 gl_ProjectionMatrix;
uniform mat4 gl_ModelViewProjectionMatrix;
так как мне передать эти значения в мой шейдер? я использую glUniformMatrix4fv
каким-то образом?
Исходный код из Руководства по программированию OpenGL ES 2.0 был полезен для шейдерной части, но все примеры, кажется, просто оставляют матричные преобразования в покое и просто проверяют, что их вершины находятся между -1.0 и 1.0.
ОБНОВЛЕНИЕ: очевидно, что OpenGL ES Shader Language не поддерживает предопределенные записи, такие как gl_ModelViewMatrix
Таким образом, единственный ответ - определить свои собственные матрицы модели / вида / проекции, как это сделано в приведенном ниже коде, используя glGetUniformLocation
а также glUniformMatrix4fv
, Я был сбит с толку, потому что OpenGL Shader Builder поддерживает их, но это обычный OpenGL, а не OpenGL ES.
2 ответа
Согласно его комментарию, эта ссылка дала достаточно информации, чтобы решить его проблему.
gl_ModelViewProjectionMatrix не соответствует спецификацииOpenGL ES Shading Language version 1.00. Кажется, существует много спецификаций языка шейдинга, так что это, вероятно, стало причиной путаницы. Насколько я понимаю, вы определяете свою форму для хранения матрицы.