Значения затенения для точек Рх и Рг равны между собой, но заметно отличаются от значения в точке М. Поэтому если нарисовать многоугольник по точкам Рх и Р2 с использованием линейной интерполяции, то затенение на нем будет постоянным и в точке М затенение будет таким же, как во всех остальных точках, что неправильно (поскольку расстояние от точки С до М заметно меньше расстояния до /{ и Р2).
Эту ситуацию легко исправить путем добавления всего одной дополнительной точки, а именно ближайшей к наблюдателю точки на . многоугольнике. В случае, изображенном на рис. 12.4, такой точкой будет сама точка М. При добавлении этой точки в ней также вычисляется значение затененности и эта точка разбивает многоугольник на веер треугольников (рис. 12.5).
Обратите внимание, что при таком способе вывода грани вершина у0 должна быть выведена дважды.
С учетом этого метод drawFogPoly выглядит следующим образом:
Рис. 12.5
Добавляем эффекты
void Fog "opengl6_195.html">⇐ Предыдущая| |Следующая ⇒