OpenGL в Delphi

       

Свойства материала


Помимо свойств материала в этом разделе мы также продолжим изучение свойств источника света.
Свойства материала задаются с помощью команды glMaterial Характеристики, определяющие оптические свойства материала, и соответствующие им символьные константы являются следующими" рассеянный цвет (GL_AMBIENT), диффузный цвет (GL_DIFFUSE), зеркальный цвет (GL_SPECULAR), Излучаемый цвет (GL_EMISSION), степень зеркального отражения (GL_ SHININESS).
Значением последнего параметра может быть число из интервала [0,128], oстальные параметры представляют собой массивы четырех вещественных чисел.
Зеркальный цвет задает цветовую гамму бликов материала, степень зеркального отражения определяет, насколько близка поверхность к идеальному зеркалу.
Поработайте с проектом из подкаталога Ех04 и выясните смысл всех характеристик материала "своими глазами".
Этот пример является продолжением предыдущего, в нем добавились пункты меню, соответствующие характеристикам материала. Важно заметить: чтобы цветовой фильтр не перебивал задаваемые свойства, в примере не включается режим GL_COLOR_MATERIAL.
Начните знакомство с примером с вариации значения степени зеркального отражения, которое определяет цветовую насыщенность блика от источника света. С помощью клавиши 'S' можно регулировать размер блика на сфере, нажимая ее одновременно с <Shift> - увеличить, а без <Shift> - уменьшить эти размеры.

Замечание
Чтобы блик появился на сфере, установите зеркальный цвет в значение, отличное от принятого по умолчанию.

Следующий пример, проект из подкаталога Ех05, знакомит нас с еще одним аспектом, связанным с источником света - с моделью освещения.
Модель освещения задается с помощью команды glLightModel. В примере внутренняя и внешняя стороны цилиндра имеют разные свойства материала, внутренняя сторона окрашена синим, внешняя - красным. Свойства материала заданы в массивах ambFront и ambBack. Для того чтобы включить освещенность для внутренней стороны многоугольников, вызывается команда glLightModel, у которой вторым аргументом задается символическая константа GL_LIGHT_MODEL_TWO_SIDE, а третьим аргументом - ноль или единица:

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); // для обеих сторон
glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @ambFront); // задняя
// сторона
glMaterialfv (GL_BACK, GL_AMBIENT_AND_DIFFUSE, @ambBack); // передняя
// сторона

Я советую вам не спеша разобраться с этим упражнением. Например, посмотрите результат, который получается при замене константы GL_AMBIENT_ANC__DIFFUSE На GL_DIFFUSE И GL_AMBIENT. Вы увидите, что диффузный цвет материала
наиболее сильно определяет цветовые характеристики поверхности.
Следующий пример, проект из подкаталога Ех06, совсем простой - на экране вращается объемная деталь, построенная на основе тестовой фигуры второй главы (Рисунок 4.2).



Содержание раздела