glLightModeli (GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); При выполнении этой команды векторы нормали к поверхности обращаются, и расчет освещения ведется с использованием свойств материалов, приписанных задним граням. Чтобы отключить двусторонний расчет освещения, в функции glLightModel используется значение по умолчанию GL_FALSE (или 0, или 0.0).

ФУНКЦИЯ СВОЙСТВ ПОВЕРХНОСТИ OpenGL

Коэффициенты отражения и другие оптические свойства поверхностей задаются с использованием функции

glMaterial* (surfFace, surfProperty, propertyValue); К функции добавляется код-суффикс i или f в зависимости от типа данных свойств, если же свойства можно задавать вектором значения, также добавляется код v. Параметру surfFace присваивается одна из символьных констант GL_FRONT, GL_BACK или GL_FRONT_AND_BACK; параметр surf Property - символьная константа, определяющая параметр поверхности, например, /SUrf> ka> ks или ns; а параметру propertyValue присвоено соответствующее значение. Все свойства, исключая параметр зеркального отражения ns, задаются как векторные значения. Чтобы установить все свойства освещенности объекта, используется последовательность функций glMaterial, затем выдаются команды, описывающие геометрию объекта.

Значение RGBA для цвета излучения с поверхности 7surf выбирается с использованием символьной константы свойства поверхности GL_EMISSION. Например, в следующем выражении задается светло-серый (грязно-белый) цвет излучения с передних поверхностей.

surfEmissionColor [ ] = {0.8, 0.8, 0.8, 1.0};

glMaterialfv (GL_FRONT, GL_EMISSION, surfEmissionColor); По умолчанию цвет излучения с поверхности - черный (0.0, 0.0, 0.0, 1.0). Хотя цвет излучения с поверхности можно задать, это излучение не будет освещать другие объекты на сцене. Чтобы это исправить, необходимо определить поверхность как источник света, используя методы, рассмотренные в разделе 10.3.

Используя символьные константы GL_AMBIENT, GL_DIFFUSE и GL_SPECULAR, зададим значения коэффициентов отражения от поверхности. Чтобы изображение выглядело реалистично, коэффициентам фонового и диффузного освещения нужно присвоить одинаковые векторные значения, и это можно сделать, используя символьную константу GL_AMBIENT_AND_DIFFUSE. По умолчанию значения коэффициентов фонового освещения равны (0.2, 0.2, 0.2, 1.0), значения коэффициентов диффузного отражения - (0.8, 0.8, 0.8, 1.0), наконец, значения коэффициентов зеркального отражения - (1.0, 1.0, 1.0, 1.0). Чтобы задать показатель зеркального отражения, используем константу GL_SHININESS. Данному свойству можно присвоить любое значение из диапазона 0-128, значение по умолчанию - 0. Например, в приведенном ниже блоке кода задаются значения трех коэффициентов отражения и показатель зеркального отражения. Коэффициенты диффузного отражения и фонового света заданы так, что поверхность отображается в светло-синем цвете при освещении белым светом; показателю зеркального отражения присвоено значение 25.0.

diffuseCoeff [ 3 =0.2, 0.4, 0.9, 1.0; specularCoeff [ ] =1.0, 1.0, 1.0, 1.0;


⇐ вернуться назад | | далее ⇒