Значения затенения для точек Рх и Рг равны между собой, но заметно отличаются от значения в точке М. Поэтому если нарисовать многоугольник по точкам Рх и Р2 с использованием линейной интерполяции, то затенение на нем будет постоянным и в точке М затенение будет таким же, как во всех остальных точках, что неправильно (поскольку расстояние от точки С до М заметно меньше расстояния до /{ и Р2).

Эту ситуацию легко исправить путем добавления всего одной дополнительной точки, а именно ближайшей к наблюдателю точки на . многоугольнике. В случае, изображенном на рис. 12.4, такой точкой будет сама точка М. При добавлении этой точки в ней также вычисляется значение затененности и эта точка разбивает многоугольник на веер треугольников (рис. 12.5).

Обратите внимание, что при таком способе вывода грани вершина у0 должна быть выведена дважды.

С учетом этого метод drawFogPoly выглядит следующим образом:

5

Рис. 12.5

Добавляем эффекты

void Fog "opengl6_195.html">⇐ Предыдущая| |Следующая ⇒