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

  • J(/-n)/2]z

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


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

    Глава 4- Преобразования объектов

    void gluLookAt (

    GLdouble eyex , GLdouble eyey , GLdouble eyez , GLdouble centx , GLdouble centy , GLdouble centz , GLdouble upx, GLdouble upy, GLdouble upz)

    где точка (eyex, eyey, eyez) определяет точку наблюдения, (centx, centy, centz) задает центр сцены, который будет проеци­роваться в центр области вывода, а вектор (upx, upy, upz) задает положительное направление оси у, определяя поворот камеры. Если, например, камеру не надо поворачивать, то задается зна­чение (0,1,0), а со значением (0, —1,0) сцена будет перевернута.

    Строго говоря, эта команда совершает перенос и поворот объ­ектов сцены, но в таком виде задавать параметры бывает удоб­нее. Следует отметить, что вызывать команду gluLookAtQ имеет смысл перед определением преобразований объектов, когда мо-дельно-видовая матрица равна единичной.

    Запомните: матричные преобразования в OpenGL нужно за­писывать в обратном порядке. Например, если вы хотите снача­ла повернуть объект, а затем передвинуть его, сначала вызови­те команду glTranslate (), а только потом —glRotate(). После этого определяйте сам объект.

    4.3. Проекции

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

    void glOrtho (GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble near , GLdouble far)

    void gluOrtho2D (GLdouble left , GLdouble right , GLdouble bottom, GLdouble top)

    4-3. Проекции

    61

    Первая команда создает матрицу проекции в усеченный объ­ем видимости (параллелепипед видимости) в левосторонней си­стеме координат.

    Параметры команды задают точки (left, bottom, znear) и (right, top, z far), которые отвечают левому нижнему и право­му верхнему углам окна вывода. Параметры near и far задают расстояние до ближней и дальней плоскостей отсечения по уда­лению от точки (0, 0, 0) и могут быть отрицательными.







    z = zfar




    /

    z = z

    lear




























    /




    (left, bottom, znear

    у




    (right, top, zfar)


    Рис. 4.З. Ортографическая проекция

    Во второй команде, в отличие от первой, значения near и far устанавливаются равными —1 и 1 соответственно. Это удобно, если OpenGL используется для рисования двумерных объектов. В этом случае положение вершин можно задавать, используя команды glVertex2.

    Перспективная проекция определяется командой

    void gluPerspective (GLdouble angley , GLdouble aspect ,

    GLdouble znear, GLdouble zfar)

    которая задает усеченный конус видимости в левосторонней си­стеме координат. Параметр angley определяет угол видимости в градусах по оси у и должен находиться в диапазоне от 0 до 180.

    62

    Глава 4- Преобразования объектов

    Угол видимости вдоль оси х задается параметром aspect, кото­рый обычно задается как отношение сторон области вывода (как правило, размеров окна).



    Рис. 4.4. Перспективная проекция

    Параметры zfar и znear задают расстояние от наблюдателя до плоскостей отсечения по глубине и должны быть положительны­ми. Чем больше отношение zfar/znear, тем хуже в буфере глу­бины будут различаться расположенные рядом поверхности, так как по умолчанию в него будет записываться «сжатая» глубина в диапазоне от 0 до 1.

    Прежде чем задавать матрицы проекций, не забудь­те включить режим работы с нужной матрицей командой glMatrixMode(GL_PROJECTION) и сбросить текущую с помощью вызова glLoadldentityQ.

    Пример:

    /* ортографическая проекция */ glMatrixMode (GL_PROJECTION); glLoadldentity () ; glOrtho(0, w, 0, h, -1.0, 1.0);

    4-4- Область вывода

    63

    4.4. Область вывода

    После применения матрицы проекций на вход следующего преобразования подаются так называемые усеченные (clipped) координаты. Затем находятся нормализованные координаты вер­шин по формуле:

    'xn\ /Xc/Wc

    Уп 1 = 1 Ус/Wc

    ,Zn) \Zc/wc

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

    void glViewPort (GLint x, GLint у,

    GLint width, GLint height)

    Значения всех параметров задаются в пикселах и определяют ширину и высоту области вывода с координатами левого нижне­го угла (х,у) в оконной системе координат. Размеры оконной си­стемы координат определяются текущими размерами окна при­ложения, точка (0,0) находится в левом нижнем углу окна.

    Используя параметры команды glViewPortQ, OpenGL вычис­ляет оконные координаты центра области вывода (ох,оу) по фор­мулам:

    ох = х + width/2 оу = у + height/2

    Пусть рх = width, py = height, тогда можно найти оконные координаты каждой вершины:

    {рх/2)хп + ох




    (Ру/2)Уп + Оу

    J(/-n)/2]zra + (n + /)/2,

    При этом целые положительные величины пи/ задают ми­нимальную и максимальную глубину точки в окне и по умол­чанию равны 0 и 1 соответственно. Глубина каждой точки за­писывается в специальный буфер глубины (z-буфер), который

    64 Глава 4- Преобразования объектов

    используется для удаления невидимых линий и поверхностей. Установить значения пи/ можно вызовом функции

    void glDepthRange (GLclampd n, GLclampd f)

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

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

    1. Какие системы координат используются в OpenGL?

    2. Перечислите виды матричных преобразований в OpenGL. Каким образом в OpenGL происходят преобразования объ­ектов?

    3. Что такое матричный стек?

    4. Перечислите способы изменения положения наблюдателя в OpenGL.

    5. Какая последовательность вызовов команд glTranslate (), glRotateQ и glScale() соответствует команде gluLookAt(0, 0, -10, 10, 0, 0, 0, -1, 0)?

    6. Какие стандартные команды для задания проекций вы зна­ете?

    7. Что такое видовые координаты? Нормализованные коорди­наты?

    Глава 5.

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

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

    5.1. Модель освещения

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

    65

    66

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

    включается вызовом команды glEnable (GL_NORMALEZE)

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

    void glLightModel [ i f] (GLenum pname, GLenum param) void glLightModel [ i f]v (GLenum pname,

    const GLtype *params)

    Аргумент pname определяет, какой параметр модели освеще­ния будет настраиваться и может принимать следующие значе­ния:

    GL_LIGHT_MODEL_LOCAL_ VIEWER - параметр

    param должен быть булевым и задает положение наблюда­теля. Если он равен GL_FALSE, то направление обзора счи­тается параллельным оси — z вне зависимости от положе­ния в видовых координатах. Если же он равен GL_TRUE, то наблюдатель находится в начале видовой системы коор­динат. Это может улучшить качество освещения, но услож­няет его расчет.

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

    GL_LIGHT_MODEL_TWO_SIDE — параметр param дол­жен быть булевым и управляет режимом расчета освещен­ности как для лицевых, так и для обратных граней. Если он равен GL_FALSE, то освещенность рассчитывается только для лицевых граней. Если же он равен GL_TRUE, расчет проводится и для обратных граней.

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

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

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

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

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


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