Я пытаюсь прочитать это руководство:
https://aerotwist.com/tutorials/an-introduction-to-shaders-part-2/
но я не могу следить. По сути, код создает направленный свет с помощью шейдеров, которые запускаются непосредственно на графическом процессоре. Это код:
// same name and type as VS
varying vec3 vNormal;
void main() {
// calc the dot product and clamp
// 0 -> 1 rather than -1 -> 1
vec3 light = vec3(0.5,0.2,1.0);
// ensure it's normalized
light = normalize(light);
// calculate the dot product of
// the light to the vertex normal
float dProd = max(0.0, dot(vNormal, light));
// feed into our frag colour
gl_FragColor = vec4(dProd, dProd, dProd, 1.0);
}
В частности, строка, которую я не понимаю, такова:
float dProd = max(0.0, dot(vNormal, light));
Как скалярное произведение vNormal вершины и света создает направленный свет. Кто-нибудь может объяснить мне схематически. Я не могу этого понять. Мне это кажется немного волшебным. Я знаю, что в этом вершинном шейдере каждая вершина передается как ввод, который называется нормальным, потому что он представлен в терминах «1», и эта общая переменная затем используется в приведенном выше коде фрагментного шейдера. Но кроме этого я не понимал, как это работает.
P.S: Я мог бы спросить автора блога, но, насколько я знаю, у него двухнедельный отпуск. Поэтому я подумал, что кто-нибудь с опытом работы в области физики или three.js сможет мне сказать.
dot
двух единичных векторов возвращает косинус угла между ними. Таким образом, будет 1, когда нормаль направлена в том же направлении света, и -1, когда в противоположном направлении. Вот об этом статья. - person gman   schedule 07.08.2017