Я пытаюсь изучить GLSL для Open GL ES 2.0. Я просмотрел учебники, но в объяснениях явно нет чего-то, потому что это не имеет никакого смысла. Возьмите код ниже. Это разорвано прямо с официальной карты OpenGL ES 2.0.Где данные, поступающие из этого вершинного шейдера?
Предполагается, что это шейдеры вершин.
uniform mat4 mvp_matrix; // model-view-projection matrix
uniform mat3 normal_matrix; // normal matrix
uniform vec3 ec_light_dir; // light direction in eye coords
attribute vec4 a_vertex; // vertex position
attribute vec3 a_normal; // vertex normal
attribute vec2 a_texcoord; // texture coordinates
varying float v_diffuse;
varying vec2 v_texcoord;
void main(void)
{
// put vertex normal into eye coords
vec3 ec_normal = normalize(normal_matrix * a_normal);
// emit diffuse scale factor, texcoord, and position
v_diffuse = max(dot(ec_light_dir, ec_normal), 0.0);
v_texcoord = a_texcoord;
gl_Position = mvp_matrix * a_vertex;
}
Задача 1: Ничто не инициализировано. В начале есть 8 переменных/объектов, и ни один из них не инициализируется. Итак, у нас есть 8 нулевых переменных/объектов.
Задача 2: Инициализированные переменные/объекты инициализируются с использованием предыдущих 8 нулевых переменных/объектов. Отлично, так что теперь все значение null ...
Задача 3: Ничто не исключено из функции. Как это может затенять что-то вне меня, оно ничего не принимает и ничего не пропускает. Единственное, что касается этого, может иметь эффект gl_Position, который, по-видимому, является какой-то специальной выходной переменной. Но это зависит только от mvp_matrix и a_vertex, для чего же все это?
И это не только этот пример, это все, что я нашел до сих пор. Я не понимаю, как объявить кучу переменных, не используя большинство из них, а затем передавать/присваивать нулевые объекты по всему месту.
«Я посмотрел на учебники« Действительно? Какие? Да, весь код GLSL * выглядит так *, но есть и текст * вокруг кода, который объясняет, что означает «атрибут», «равномерность» и «переменный». Если такой текст не существует, то вы не найдете учебник. Вы нашли * пример кода *, который совсем другой. Учебники объясняют, примеры кода - это всего лишь код. –