При рисовании очередного отрезка АВ будем считать, что интенсивность изменяется от 1(А) до 1(В) линейно.

Ниже приводится функция, осуществляющая построение горизонтального отрезка с изменением интенсивности от 1а до 1Ь.

у, int ia, int ib) {

Рис. 11.1

@ // File drawLine.cpp

void drawLine (int xa, int xb, int у, int ia, int ib) {

long i = ((long) ia) « 16;
long di = (((long)(ib - ia)) «16)/ (xb- xa + 1 );
>, for ( int x = xa; x <= xb; x++, i += di )
putpixel ( x, y, (int)(i » 16) );
Ï

Эта функция рассчитана на то, что цветам от ia до ib соответствует набор промежуточных цветов с линейно возрастающей интенсивностью, например когда вся палитра состоит из оттенков одного или нескольких цветов.

Подобный метод билинейной интерполяции используется в ряде графических систем, например в OpenGL.

Метод Гуро гарантирует создание непрерывного поля освещенности вдоль объекта, но это поле не является гладким (дифференцируемым). Следующий метод строит поле освещенности, полностью имитируя гладкость объекта.

11.3. Метод Фонга Гладкий объект отличается от негладкого тем, что на его поверхности задано непрерывное поле единичных векторов нормали. Попытаемся построить такое поле искусственно. Для этого применим описанную ранее процедуру билинейной интерполяции не к значениям освещенности, а к значениям вектора нормали. В результате мы получим непрерывное поле векторов нормали, но, так как эти векторы не всегда оказываются единичными, нужна нормировка.

При помощи полученного единичного вектора нормали в соответствующей точке по формулам (11.1) или (11.2) находится значение освещенности. Это позволяет создавать достаточно реалистически выглядящие изображения с корректными бликами.

Метод Фонга требует намного больше вычислений, чем метод Гуро, так как вычисление вектора нормали и освещенности производится отдельно в каждой точке.

Методы Гуро и Фонга являются инкрементальными методами, использующими значения параметров в предыдущей точке для вычисления значений параметров в следующей.

Компьютерная графика. Полигональные модели


⇐ Предыдущая| |Следующая ⇒