Цвет, видимый в точке соударения, зависит от сочетания фоновой, диффузной и зеркальной составляющих света. Коэффициенты отражения par, pdg и остальные хранятся вместе с объектом соударения и доступ к ним возможен через поля mtrl .ambient, mtrl .diffuse, mtrl .specular. Загрузка в эти поля происходит при первом чтении SDL-файла На практике зеркальный цвет по Фонгу обычно принимают равным цвету источника света. Для этого коэффициенту отражения присваивают одинаковые красный, зеленый и синий компоненты: (0,9,0,9, 0,9), поэтому при умножении на этот коэффициент цвет источника света дает тот же цвет, хотя и слегка ослабленный. В результате этого эффекта материал выглядит как блестящая пластмасса.

Если коэффициент mtrl. specul аг выбирать более тщательно, то можно несколько увеличить реалистичность бликов Фонга. Коэффициенты, приведенные в табл. 8.1 согласно работе Мак-Рейнольдса и Блайта (McReynolds, Blythe), обеспечивают более реалистичный вид различных материалов.

Коэффициенты отражения легко могут быть добавлены в SDL-файл сцены. Различные материалы вначале определяются посредством следующего кода:

def Copper{ ambient 0.19125 0.0735 0.0225
diffuse 0.7038 0.27048 0.0828
specular 0.256777 0.137622 0.086014 exponent 12.8}
def Gold{ ambient 0.24725 0.1995 0.0745
diffuse 0.75164 0.60648 0.22648
specular 0.628281 0.555802 0.366065 exponent 51.2}

и затем используются для задания свойств различных объектов сцены, что делается примерно так:

use Gold
sphere ! make the sphere out of gold

! создаем сферу из золота translate 12 1

use Copper cube ! and the cube out of copper

! и куб из меди Листинг 14.10. Добавление вычислений закрашивания в подпрограмму shadeO (псевдокод)1

СоТогЗ Scene :: shade(Ray& г) {

Get the first hit using getFirstHit(r, best): // Получаем первое соударение с помощью Make handy сору h - best.hit[0]:

14.7. Рисование закрашенных изображений сцен

// создаем удобную копию // data about the first hit // данные по первому соударению

Form hitPoint based on h.hitTime // Формируем hitPoint на базе h.hitTime


⇐ Предыдущая| |Следующая ⇒