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

  • GL_OBJECT_LINEAR

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


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

    82

    Глава 6. Текстурирование

    ляет функцию, которая будет использоваться для сжатия текстуры. При значении GL_NEAREST будет использовать­ся один (ближайший), а при значении GL_LINEAR — четы­ре ближайших элемента текстуры.

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

    GL_TEXTURE_MAG_FILTER —параметр param опреде­ляет функцию, которая будет использоваться для увеличе­ния (растяжения) текстуры. При значении GL_NEAREST будет использоваться один (ближайший), а при значении GL_LINEAR — четыре ближайших элемента текстуры.

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

    GL_TEXTURE_WRAP_S —параметр param устанавлива­ет значение координаты s, если оно не входит в отрезок [0,1]. При значении GL_REPEAT целая часть s отбрасы­вается, и в результате изображение размножается по по­верхности. При значении GL_CLAMP используются крае­вые значения (0 или 1), что удобно использовать, если на объект накладывается один образ.

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

    GL_TEXTURE_WRAP_T — аналогично предыдущему зна­чению, только для координаты t.

    Использование режима GL_NEAREST повышает скорость на­ложения текстуры, однако при этом снижается качество, так как, в отличие от GL_LINEAR, интерполяция не производится.

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

    void glTexEnv [ i f] (GLenum target , GLenum pname,

    GLtype param)

    void glTexEnv [ i f]v (GLenum target , GLenum pname,

    GLtype *params)

    6.2. Наложение текстуры на объекты

    83

    Параметр target должен быть равен GL_TEXTURE_ENV, а в качестве pname рассмотрим только одно значение GL_TEXTURE_ENV_MODE, которое применяется наиболее часто.

    Наиболее часто используемые значения параметра param:

    GL MODULATE — конечный цвет находится как произведе­ние цвета точки на поверхности и цвета соответствующей ей точки на текстуре.

    GL REPLACE —в качестве конечного цвета используется цвет точки на текстуре.

    Следующий пример кода демонстрирует общий подход к со­зданию текстур:

    /* нужное нам количество текстур */

    #define NUM_TEXTURES 10

    /* идентификаторы текстур */

    int TextureIDs[NUM_TEXTURES] ;

    /* образ текстуры */

    AUX_RGBImageRec *plmage;

    /* 1) получаем идентификаторы текстур */ glGenTextures (NUMJTEXTURES, TexturelDs );

    /* 2) выбираем текстуру для модификации параметров */ glBindTexture( TexturelDs [i ]) ; /* 0<=i

    /* 3) загружаем текстуру.

    Размеры текстуры " степень 2 */

    pImage=dibImageLoad (" texture .bmp" );

    if (Texture!=NULL)

    {

    /* 4) передаем текстуру OpenGL и задаем параметры*/

    84

    Глава 6. Текстурирование

    /* выравнивание по байту */ glPixelStorei (GLJJNPACK_ ALIGNMENT, 1);

    gluBuildMipmaps(GL_TEXTURE_2D,GL_RGB, pImage->sizeX , pImage->sizeY , GL_RGB, GL_UNSIGNED_BYTE, plmage—>data ) ;

    g 1T e x P a r a m e t e r f (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ( float )GL_IJNEAR);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ( float )GL_IJNEAR);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ( float )GL_REPEAT);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ( float )GL_REPEAT);

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, ( float )GL_REPLACE) ;

    /* 5) удаляем исходное, изображение.*/ free ( Texture);

    } else

    Error () ;

    6.3. Текстурные координаты

    Перед нанесением текстуры на объект необходимо установить соответствие между точками на поверхности объекта и на самой текстуре. Задавать это соответствие можно двумя методами: от­дельно для каждой вершины или сразу для всех вершин, задав

    6.3. Текстурные координаты

    85

    параметры специальной функции отображения. Первый метод реализуется с помощью команд

    void glTexCoord[l 2 3 4][s i f d] (type coord) void glTexCoord[l 2 3 4][s i f d]v (type *coord)

    Чаще всего используются команды glTexCoord2*(type s, type t), задающие текущие координаты текстуры. Понятие текущих ко­ординат текстуры аналогично понятиям текущего цвета и теку­щей нормали и является атрибутом вершины. Однако даже для куба нахождение соответствующих координат текстуры являет­ся довольно трудоемким занятием, поэтому в библиотеке GLU помимо команд, проводящих построение таких примитивов как сфера, цилиндр и диск, предусмотрено также наложение на них текстур. Для этого достаточно вызвать команду

    void gluQuadricTexture ( GLUquadricObj * quadObject , GLboolean textureCoords)

    с параметром textureCoords равным GL_TRUE, и тогда текущая текстура будет автоматически накладываться на примитив. Второй метод реализуется с помощью команд

    void glTexGen [ i f d] (GLenum coord, GLenum pname,

    GLtype param) void glTexGen [ i f d]v (GLenum coord, GLenum pname,

    const GLtype *params)

    Параметр coord определяет для какой координаты задается формула, и может принимать значение GL_S, GL_T; pname мо­жет быть равен одному из следующих значений:

    GL_TEXTURE_GEN_MODE —задает функцию для на­ложения текстуры. В этом случае аргумент param прини­мает значения:

    GL_OBJECT_LINEAR —значение соответствующей текстурной координаты определяется расстоянием до

    86

    Глава 6. Текстурирование

    плоскости, задаваемой с помощью значения pname GL_OBJECT_PLANE (см. ниже). Формула выглядит следующим образом:

    g = x*Xp + y*yp + z*Zp + w*wp

    где д — соответствующая текстурная координата (s или р), x,y,z,w — координаты соответствующей точ­ки. xp,yp,Zp,Wp — коэффициенты уравнения плоско­сти. В формуле используются координаты объекта.

    GL_EYE_LINEAR — аналогично GL_OBJECT_LINEAR,

    только в формуле используются видовые координаты. Т.е. координаты текстуры объекта в этом случае за­висят от положения этого объекта.

    GL_SPHERE_MAP —позволяет эмулировать отраже­ние от поверхности объекта. Текстура как бы «обо­рачивается» вокруг объекта. Для данного метода ис­пользуются видовые координаты и необходимо зада­ние нормалей.

    GL_OBJECT_PLANE —позволяет задать плоскость, рас­стояние до которой будет использоваться при генерации ко­ординат, если установлен режим GL_OBJECT_LINEAR. В этом случае параметр params является указателем на мас­сив из четырех коэффициентов уравнения плоскости.

    GL_EYE_PLANE — аналогично предыдущему значению. Поз­воляет задать плоскость для режима GL_EYE_LINEAR.

    Для установки автоматического режима задания текстурных координат необходимо вызвать команду glEnable с параметром GL_TEXTURE_GEN_Sили GL_TEXTURE_GEN_P.

    Программа, использующая наложение текстуры и анимацию, приведена в приложении Б.

    6.4- Контрольные вопросы

    87

    6.4. Контрольные вопросы

    1. Что такое текстура и для чего используются текстуры?

    2. Что такое текстурные координаты и как задать их для объ­екта?

    3. Какой метод взаимодействия с материалом нужно исполь­зовать, если текстура представляет собой картину, вися­щую на стене (GL_MODULATE, GL_REPLACE)?

    4. Перечислите известные вам методы генерации текстурных координат в OpenGL.

    5. Для чего используются уровни детализации текстуры (mip-mapping)?

    6. Что такое режимы фильтрации текстуры и как задать их в OpenGL?


    Глава 7.

    Операции с пикселями

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

    OpenGL использует эту информацию, чтобы записать обнов­ленные данные в буфер кадра. Для этого OpenGL имеет не толь­ко отдельный конвейер обработки пикселей, но и несколько до­полнительных буферов различного назначения. Это позволяет программисту гибко контролировать процесс визуализации на самом низком уровне.

    Графическая библиотека OpenGL поддерживает работу со следующими буферами:

    • несколько буферов цвета;

    • буфер глубины;

    • буфер-накопитель (аккумулятор);

    89

    1   ...   7   8   9   10   11   12   13   14   ...   30


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