Сомнения относительно формул WebGL затенения Фонга, как объяснено в книге Ангела Шрайнера - PullRequest
0 голосов
/ 30 мая 2019

В восьмом пакете слайдов книги Ангела Шрайнера «Интерактивная компьютерная графика» (слайды доступны здесь ) предлагаемый код для расчета освещения начинается следующим образом:

    vec3 pos = -(modelViewMatrix*vPosition).xyz;

    vec3 L = normalize( lightPosition.xyz - pos );

    vec3 E = normalize( -pos );

    vec3 N = normalize(modelViewMatrix*vNormal.xyz);

    vec3 H = normalize( L + E );


однако, этот способ не только выглядит неправильно, если я не убираю минус в объявлении pos, но даже если я делаю это, освещение слишком зависит от положения зрителя (некоторые части темные и становятся полностью светлыми, если зритель переезжает туда) Если в объявлении N я переключаю модельViewViewMatrix только с матрицей модели, то это выглядит как чудо. Это ошибка в коде книги? И в чем математическая причина этого? Мне бы очень хотелось узнать, как работает затенение, но книга не всегда понятна. Я бы сказал, что зритель должен влиять на то, как рассчитывается освещение, но не на то, как это происходит в предлагаемом коде.

...