Главная страница
Навигация по странице:

  • GL_ AMBIENT_ ANDDIFFUSE

  • GL_SPOT_EXPONENT

  • GLCONSTANTATTENUATION

  • Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


    Скачать 0.66 Mb.
    НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
    Дата21.10.2022
    Размер0.66 Mb.
    Формат файлаdocx
    Имя файла221937-83556.docx
    ТипРуководство
    #747097
    страница9 из 30
    1   ...   5   6   7   8   9   10   11   12   ...   30
    67

    5.2. Спецификация материалов

    Для задания параметров текущего материала используются команды

    void glMaterial[i f] (GLenum face , GLenum pname,

    GLtype param) void glMaterial[i f]v (GLenum face , GLenum pname,

    GLtype *params)

    С их помощью можно определить рассеянный, диффузный и зеркальный цвета материала, а также степень зеркального от­ражения и интенсивность излучения света, если объект должен светиться. Какой именно параметр будет определяться значени­ем param, зависит от значения pname:

    GL AMBIENT — параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют рассеянный цвет материала (цвет материала в тени).

    Значение по умолчанию: (0.2, 0.2, 0.2,1.0).

    GL DIFFUSE —параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют диффузный цвет материала.

    Значение по умолчанию: (0.8, 0.8, 0.8,1.0).

    GL SPECULAR — параметр params должен содержать четы­ре целых или вещественных значения цветов RGBA, кото­рые определяют зеркальный цвет материала.

    Значение по умолчанию: (0.0, 0.0, 0.0,1.0).

    GL_SHININESS —параметр params должен содержать одно целое или вещественное значение в диапазоне от 0 до 128, которое определяет степень зеркального отражения мате­риала.

    Значение по умолчанию: 0.

    GL EMISSION — параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют интенсивность излучаемого света материала.

    Значение по умолчанию: (0.0, 0.0, 0.0,1.0).

    GL_ AMBIENT_ ANDDIFFUSE - эквивалентно

    двум вызовам команды glMaterialQ со значением pname GL_AMBIENT и GL_DIFFUSE и одинаковыми значениями params.

    Из этого следует, что вызов команды glMaterial [ i f]() возмо­жен только для установки степени зеркального отражения ма­териала (shininess). Команда glMaterial [i f]v() используется для задания остальных параметров.

    Параметр face определяет тип граней, для которых зада­ется этот материал и может принимать значения GL_FRONT, GL_BACK или GL_FRONT_AND_BACK.

    Если в сцене материалы объектов различаются лишь одним параметром, рекомендуется сначала установить нужный режим, вызвав glEnable() с параметром GL_COLOR_MATERIAL, а затем использовать команду

    void glColorMaterial (GLenum face , GLenum pname)

    где параметр face имеет аналогичный смысл, а параметр pname может принимать все перечисленные значения. После этого зна­чения выбранного с помощью pname свойства материала для кон­кретного объекта (или вершины) устанавливаются вызовом ко­манды glColor, что позволяет избежать вызовов более ресурсоем­кой команды glMaterial и повышает эффективность программы. Другие методы оптимизации приведены в главе 9. Пример определения свойств материала:

    float mat_dif[] = {0.8 ,0.8 ,0.8}; float mat_amb[] = {0.2, 0.2, 0.2}; float mat_spec[] = {0.6, 0.6, 0.6};

    5.3. Описание источников света

    69

    float shininess = 0.7 * 128;

    glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT,

    mat_amb); glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE,

    mat_dif); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR,

    mat_spec); g 1M a t e r i a 1 f (GL_FR0NT, GL_SHININESS,

    shininess);

    5.3. Описание источников света

    Определение свойств материала объекта имеет смысл, толь­ко если в сцене есть источники света. Иначе все объекты будут черными (или, строго говоря, иметь цвет, равный рассеянному цвету материала, умноженному на интенсивность глобального фонового освещения, см. команду glLightModel). Добавить в сце­ну источник света можно с помощью команд

    void glLight [ i f] (GLenum light , GLenum pname,

    GLfloat param) void glLight [ i f] (GLenum light , GLenum pname,

    GLfloat *params)

    Параметр light однозначно определяет источник света. Он выбирается из набора специальных символических имен вида GL_LIGHTi, где i должно лежать в диапазоне от 0 до кон­станты GL_MAX_LIGHT, которая обычно не превосходит вось­ми.

    Параметры pname и params имеют смысл, аналогичный ко­манде glMaterial. Рассмотрим значения параметра pname:

    GL_SPOT_EXPONENT —параметр param должен содер­жать целое или вещественное число от 0 до 128, задающее

    70

    Глава 5. Материалы и освещение

    распределение интенсивности света. Этот параметр описы­вает уровень сфокусированности источника света.

    Значение по умолчанию: 0 (рассеянный свет).

    GL_SPOT_CUTOFF —параметр param должен содержать целое или вещественное число между 0 и 90 или равное 180, которое определяет максимальный угол разброса све­та. Значение этого параметра есть половина угла в вершине конусовидного светового потока, создаваемого источником.

    Значение по умолчанию: 180 (рассеянный свет).

    GL AMBIENT — параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет фонового освещения.

    Значение по умолчанию: (0.0, 0.0, 0.0,1.0).

    GL DIFFUSE —параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет диффузного освещения.

    Значение по умолчанию: (1.0,1.0,1.0,1.0) для GL_LIGHT0 и (0.0,0.0,0.0,1.0) для остальных.

    GL SPECULAR — параметр params должен содержать четы­ре целых или вещественных значения цветов RGBA, кото­рые определяют цвет зеркального отражения.

    Значение по умолчанию: (1.0,1.0,1.0,1.0) для GL_LIGHT0 и (0.0,0.0,0.0,1.0) для остальных.

    GL POSITION —параметр params должен содержать четыре целых или вещественных числа, которые определяют поло­жение источника света. Если значение компоненты w рав­но 0.0, то источник считается бесконечно удаленным и при расчете освещенности учитывается только направление на точку (х,у, z), в противном случае считается, что источник расположен в точке (х, у, z,w). В первом случае ослабления

    5.3. Описание источников света

    71

    света при удалении от источника не происходит, т.е. источ­ник считается бесконечно удаленным.

    Значение по умолчанию: (0.0, 0.0,1.0, 0.0).

    GL_SPOT_DIRECTION —параметр params должен хра­нить четыре целых или вещественных числа, которые опре­деляют направление света.

    Значение по умолчанию: (0.0, 0.0, —1.0,1.0).

    Эта характеристика источника имеет смысл, если значение GL_SPOT_CUTOFF отлично от 180 (которое, кстати, зада­но по умолчанию).

    GLCONSTANTATTENUATION ,

    GLLINEARATTENUATION ,

    GL_QUADRATIC_ATTENUATION -параметр params задает значение одного из трех коэффициентов, опреде­ляющих ослабление интенсивности света при удалении от источника. Допускаются только неотрицательные значения. Если источник не является направленным (см. GL_POSITION), то ослабление обратно пропорционально сумме:

    attconstant + attlinear * d + attquadratic * d2

    где d — расстояние между источником света и осве­
    щаемой им вершиной; attconstant, attlinear и
    attquadratic равны параметрам, заданным с по­
    мощью констант GL_CONSTANT_ ATTENUATION,
    GL_LINEAR_ATTENUATION и
    GL_QUADRATIC_ATTENUATION соответственно. По
    умолчанию эти параметры задаются тройкой (1,0,0), и
    фактически ослабления не происходит.

    72

    Глава 5. Материалы и освещение

    При изменении положения источника света следует учиты­вать следующий факт: в OpenGL источники света являются объ­ектами, во многом такими же, как многоугольники и точки. На них распространяется основное правило обработки координат в OpenGL — параметры, описывающее положение в пространстве, преобразуются текущей модельно-видовой матрицей в момент формирования объекта, т.е. в момент вызова соответствующих команд OpenGL. Таким образом, формируя источник света одно­временно с объектом сцены или камерой, его можно привязать к этому объекту. Или, наоборот, сформировать стационарный ис­точник света, который будет оставаться на месте, пока другие объекты перемещаются.

    Общее правило такое: если положение источника света зада­ется командой glLight перед определением положения виртуаль­ной камеры (например, командой glLookAtQ), то будет считаться, что координаты (0,0,0) источника находится в точке наблюде­ния и, следовательно, положение источника света определяется относительно положения наблюдателя.

    Если положение устанавливается между определением поло­жения камеры и преобразованиями модельно-видовой матрицы объекта, то оно фиксируется, т.е. в этом случае положение источ­ника света задается в мировых координатах. Для использования освещения сначала надо установить соответствующий режим вы­зовом команды glEnable(GL_LIGHTING), а затем включить нуж­ный источник командой glEnable(GL_LIGHTi).

    Еще раз обратим внимание на то, что при выключенном осве­щении цвет вершины равен текущему цвету, который задается командами glColor. При включенном освещении цвет вершины вычисляется исходя из информации о материале, нормалях и источниках света.

    При выключении освещения визуализация происходит быст­рее, однако в таком случае приложение должно само рассчиты­вать цвета вершин.

    5.4- Создание эффекта тумана

    73

    Текст программы, демонстрирующей основные принципы определения материалов и источников света, приведен в при­ложении Б.

    5.4. Создание эффекта тумана

    В завершение рассмотрим одну интересную и часто использу­емую возможность OpenGL — создание эффекта тумана. Легкое затуманивание сцены создает реалистичный эффект, а иногда может и скрыть некоторые артефакты, которые появляются, ко­гда в сцене присутствуют отдаленные объекты.

    Туман в OpenGL реализуется путем изменения цвета объек­тов в сцене в зависимости от их глубины, т.е. расстояния до точ­ки наблюдения. Изменение цвета происходит либо для вершин примитивов, либо для каждого пикселя на этапе растеризации в зависимости от реализации OpenGL. Этим процессом можно частично управлять — см. раздел 7.

    Для включения эффекта затуманивания необходимо вызвать команду glEnable(GL_FOG).

    Метод вычисления интенсивности тумана в вершине можно определить с помощью команд

    1   ...   5   6   7   8   9   10   11   12   ...   30


    написать администратору сайта