glColor3f(0.0,0.0,1.0);
divide_triangle(v[0], v[3], v[l], k);
glColor3f(0.0,0.0,0.0);
divide_triangle(v[0], v[2], v[3], k);
}
Здесь переменная n по-прежнему представляет количество циклов выполнения рекурсивной процедуры. При выводе на экран элементарных треугольников каждой грани им следует задать свое значение атрибута цвета, тогда изображение трехмерной структуры будет лучше восприниматься пользователем. Но перед нами стоит еще одна проблема, которую следует решить, если уж мы хотим получить нормальное изображение.
2.9.3. Удаление невидимых поверхностей При выполнении программы, рассмотренной в предыдущем разделе, результат не очень вас впечатлит. Программа будет выводить на экран треугольники в том порядке, в каком они формируются в процессе выполнения деления граней. Этот порядок не имеет отношения к расположению граней в пространстве, каждый треугольник будет заливаться своим цветом, причем те треугольники, которые формируются позже, перекроют нарисованные раньше.
Совсем другая картинка открылась бы нашему взору, если бы узор создавался из реальных маленьких непрозрачных треугольников. В этом случае были бы видны только те из них, которые ближе к наблюдателю. На рис. 2.38 схематически показано, в чем состоит суть проблемы невидимых поверхностей. Наблюдатель видит прежде всего ближайший к нему участок А, а что касается остальных, то треугольник В оказывается вообще невидим, а в треугольнике С видна только та часть, которая не перекрывается участком А. Даже не вдаваясь в детали алгоритмов анализа невидимых поверхностей, можно сразу заметить, что решающее значение имеет взаимное положение наблюдателя и отображаемых участков поверхностей, в данном случае- треугольников. Алгоритмы упорядочения объектов в порядке их близости к наблюдателю называются алгоритмами анализа видимости поверхностей (visible-surface algorithms) или алгоритмами удаления невидимых поверхностей (hidden-surface-removal algorithms) - все зависит от точки зрения. Эти алгоритмы мы подробно рассмотрим в главах 4 и 7.