В восьмом пакете слайдов книги Ангела Шрайнера «Интерактивная компьютерная графика» (слайды доступны здесь ) предлагаемый код для расчета освещения начинается следующим образом:
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 только с матрицей модели, то это выглядит как чудо. Это ошибка в коде книги? И в чем математическая причина этого? Мне бы очень хотелось узнать, как работает затенение, но книга не всегда понятна. Я бы сказал, что зритель должен влиять на то, как рассчитывается освещение, но не на то, как это происходит в предлагаемом коде.