Я пытаюсь изучить 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 нулевых переменных / объектов.Отлично, теперь все равно нулю ...
Проблема 3: Ничто не передается из функции.То, как это может затенить все, мне не по силам, это ничего не принимает и ничего не выдает.Единственное, к чему это может привести, - это gl_Position, который, по-видимому, является некоторой специальной выходной переменной.Но это зависит только от mvp_matrix и a_vertex, так для чего все остальные вещи?
И это не просто этот пример, это все, что я нашел до сих пор.Я не понимаю, как объявление группы переменных, не использование большинства из них, а затем передача / назначение нулевых объектов повсеместно может сделать что угодно.