Последний этап - сдвинуть все обратно с помощью матрицы сдвига Т(х/, у,, Суперпозиция двух сдвигов и проективного преобразования проецирует вершину (л, у, х) в точку (Хр. у р. гД где

Проекция многоугольника тени

Рис. 5.42. Проекция многоугольника тени: а - при взгляде от источника света; б - источник сдвинут в начало координат

5.9. Проецирование и формирование теней Для формирования такого многоугольника в программе OpenGL можно изменить матрицу вида:

GLfloat m[16]; /* Матрица проективного преобразования тени */ for(i=0;i<15;i++) m[i]=0.0; m[0]=m[5]=m[10]=1.0; m[7]= -l.Û/yl;

glColor3fv(polygon_color)

glBegin(GL_P0LYG0N} /* Вычертить многоугольник как обычно. */

glEnd( )

glMatrixMode(GL_MODELVIEW); glPushMatrix() /* сохранить состояние */ glTranslatef(xl,yl,zl); /* сдвинуть */ glMultMatrixf(m); /* проекция */

glTranslate(-xl,-yl,-zl); /* перенести источник света в начало координат */

glColor3fv(shadow_color);
glBegin(GL_POLYGON);

/* Снова вычертить многоугольник. */

glEnd();

glPopMatrix(); /* восстановить состояние */

Обратите внимание на то, что, хотя выполняется проективное преобразование относительно точки положения источника света, матрица, которую мы при этом используем, является "системной" матрицей вида. Тот же самый многоугольник вычерчивается дважды: первый раз - как обычно, а второй раз - с использованием измененной матрицы вида, которая преобразует вершины многоугольника. И для исходного многоугольника, и для его тени используются одни и те же параметры визуализации. Результат вычисления многоугольника тени для изображения цветового куба показан на ил. 5 цветной вклейки, а программу формирования тени вы найдете в файле cubes.с.

В простых программах, например в программе, отображающей тень, которую отбрасывает на землю летящий самолет, описанный прием работает достаточно эффективно. Его можно использовать и при работе не с точечным, а с удаленным (параллельным) источником света (см. упр. 5.17). Но если объект отбрасывает тень на поверхность другого объекта, то такая методика не годится. В главе 9 будет описан другой, более общий метод формирования теней, который, правда, требует гораздо более сложных вычислений.


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