! темно-серый глобальный фоновый свет
ambient .2 .6 О
diffuse .8 .2. 1
! red material
! красный материал
specular 111
! bright specular spots - the color of the source
! яркие зеркальные блики - с цветом источника
specularExponent 20
!set the Phong exponent
! устанавливаем показатель Фонга
scale 4 4 4 sphere
описывает сцену, содержащую сферу со следующими свойствами материала (см. равенство (8.7)): О коэффициенты фонового отражения: (рм, р^, раЬ) - (0,2, 0,6,0); О коэффициенты диффузного отражения: (pdr, pdg, pdb) - (0,8, 0,2,1,0); О коэффициенты зеркального отражения: (psr, psg, psb) - (1,0,1,0,1,0); О показатель Фонга: /=20.
Для диффузного и зеркального компонентов источника света установлен цвет (0,8,0,8,0,8). Глобальный фоновый член равен (Ier> 1^, 1^) = (0,2,0,2,0,2).
Текущие свойства материала загружаются в поле mtrl каждого объекта в момент создания этого объекта (см. заключительные строки описания функции Scene : : getObjectO в файле SDL.cpp в приложении В). Когда объект рисуется с помощью подпрограммы drawOpenGLO, он сначала передает в OpenGL свои свойства материала (см. описание Shape: : tellMaterialsGLO). Тогда в момент фактического рисования объекта OpenGL уже будет иметь эти свойства материала в текущем состоянии объекта.
В главе 14 при исследовании трассировки лучей мы аналогичным образом будем использовать поле свойств материала каждого объекта, чтобы запрашивать эти свойства материала для правильного закрашивания.
8.3. Плоское и плавное закрашивание Для различных объектов требуются различные оттеночные эффекты. В главе 6 мы моделировали различные формы с применением полигональных сеток. Для некоторых из них, вроде сарая и бакибола, мы хотим увидеть на картинке отдельные грани, а для других, типа сферы или шахматной пешки, мы предпочитаем видеть «истинную» поверхность, которую эти грани аппроксимируют.
В процессе моделирования мы «привязывали» к каждой вершине каждой грани нормаль к этой грани. Если поверхность является полигоном, то ко всем ее вершинам привязывается одна и та же нормаль; эта нормаль выбирается так, чтобы она указывала нормальное направление к плоскости этой грани. С другой стороны, если эта грань является приближением к истинной поверхности, то к каждой вершине мы привязываем нормаль к истинной поверхности в этой точке.