Листинг 15.3. Код на языке С для рисования силуэтов простых объектов
// Включить отбраковку glEnable(GL_CULL_FACE);
// Рисовать передние грани как заполненные с помощью шейдера Гуча
glPolygonMode(GL_FRONT. GLJILL) :
glDepthFunc(GLLESS):
glCul1Face(GL_BACK):
glUseProgramObjectARB(ProgramObject):
drawSphere(0.6f, 64):
// Рисовать задние грани черными контурами обычными вызовами OpenGL
glLineWidth(5.0):
glPolygonMode(GL_BACK. GL_L1 NE);
glDepthFunc(GLLEQUAL):
glCullFace(GL_FRONT):
glColor3f(0.0. 0.0, 0.0);
glUseProgramObjectARB(O);
drawSphere(0.6f, 64);
Второй аспект заливки Гуча - то, что рассеянное освещение вычисляется по методу Фонга, и его цветом является белый. Освещение дает информацию о кривизне
Нефотореалистичные шейдеры
поверхности, и выбор белого цвета гарантирует, что освещенные области будут отличаться от контурных черных линий и от цветов заливки объекта (обычно они не черные и не белые).
Третий аспект алгоритма - ограниченный диапазон значений яркости, используемых для подчеркивания кривизны поверхности объекта. Эта часть заливки выполняется с использованием цвета объекта, и обычно это среднее значение, которое не сливается ни с черным, ни с белым цветом.
Так как диапазон значений яркости ограничен, переход цвета от теплого к холодному тоже используется для передачи информации о поверхности объекта. Художники применяют теплые (желтый, красный, оранжевый) и холодные (синий, фиолетовый, зеленый) цвета, чтобы правильно передать глубину. Теплые цвета, визуально приближающие объект, больше подходят для ближних объектов. Холодные цвета, визуально отдаляющие объект, больше подходят для объектов, расположенных на заднем плане.
Заливка объектов зависит от двух коэффициентов. Коэффициент рассеянного отражения нужен для вычисления значений в ограниченном диапазоне для заливки. Вторым коэффициентом является полоска перехода между двумя разными цветами. Один из этих цветов будет холодный, имитирующий удаление поверхности, второй - теплый, имитирующий приближение поверхности. Полоса перехода цветов от холодного к теплому получается полутоновая, вне зависимости от основного цвета объекта.