Как передать матрицы 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. Кажется, существует много спецификаций языка шейдинга, так что это, вероятно, стало причиной путаницы. Насколько я понимаю, вы определяете свою форму для хранения матрицы.

Другие вопросы по тегам