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

  • КВАДРИК-ОБЪЕКТЫ. КАМЕРА Цель работы

  • Порядок выполнения работы

  • Необходимые теоретические сведения

  • ОСВЕЩЕНИЕ Цель работы

  • Е. А. Снижко, Н. А. Флерова


    Скачать 0.57 Mb.
    НазваниеЕ. А. Снижко, Н. А. Флерова
    Дата02.11.2018
    Размер0.57 Mb.
    Формат файлаpdf
    Имя файлаelr00490.pdf
    ТипПрактикум
    #55262
    страница4 из 7
    1   2   3   4   5   6   7
    Матрица проецирования. Для корректного выполнения операций проецирования используется матрица проецирования.

    38
    Текущую матрицу проецирования можно установить с помощью команды glMatrixMode(GL_PROJECTION);
    После ее выполнения следует установить матрицу проециро- вания в единичную с помощью команды glLoadIdentity.
    Как правило, параметры вида помещаются в обработчике из- менения размеров окна, стартовые сдвиги и повороты обычно располагаются здесь же, а код воспроизведения сцены – между командами glPushMatrix и glPopMatrix. Иногда поступают иначе: код воспроизведения начинается с glLoadIdentity, а далее идут стартовые трансформации и собственно код сцены.
    Задания к работе
    1. Построить изображения трех плоских фигур в простран- стве (в соответствии с вариантом). Оценить полученный резуль- тат: правильно ли изображены фигуры, если нет, объяснить по- чему.
    2. Установить режим проверки буфера глубины в программе к заданию 1. Сравнить полученный результат с предыдущим.
    3. Установить видовые параметры в соответствии с вариан- том и параллельную проекцию; построить изображение куба с координатами вершин, равными по модулю 1 (куб изображается с помощью шести квадратов). Оценить результат.
    4. Установить перспективную проекцию и построить кар- касное изображение куба
    5. Повернуть оси координат в соответствии с вариантом и построить изображение куба. Оценить результат. Почему части куба отсечены? Изменить видовые параметры таким образом, чтобы куб изображался без отсечений. Изменить код программы таким образом, чтобы каждая грань куба изображалась своим цветом.
    6. Написать программу, в которой изображение куба изме- няется при нажатии клавиш (в соответствии с вариантом).

    39
    Варианты заданий
    Фигуры
    (заданы вершинами)
    Параметры вида
    Поворот осей
    К заданию 6
    В
    ар иа нт
    1
    Треугольник:
    (0, 0.3, 0.2) (0.3, 0.3, 0) (0, 0, 0.7)
    Квадрат:
    (-0.5, 0.5, 0.3) (-0.5, -0.5, 0.3)
    (0.5, -0.5, 0.3) (0.5, 0.5, 0.3)
    Треугольник:
    (0, 0, 0.3) (0.4, 0, 0.5) (-0.5, 05, -1)
    -0.7, 0.7
    -0.85,
    0.85 3, 10
    Вокруг
    OX:
    30
    Вокруг
    OY:
    70
    Изменяется способ изо- бражения: каркасное или заливка цветом
    В
    ар иа нт
    2
    Четырехугольник:
    (-0.5, -0.5, -0.5) (-0.5, 0.5, -0.5)
    (0.8, 0.5, -0.5) (0.5, -0.8, -0.5)
    Треугольник:
    (-1, -1, 1) (-1, 1, 1) (1, 0, -1);
    Треугольник:
    (-0.7, -0.7, -0.7) (0, 0, 0) (0, 0, 1)
    -0.9, 0.8
    -0.8, 0.9 5, 10
    Вокруг
    OX:
    45
    Вокруг
    OY:
    45
    Изменяется масштаб: увеличение или умень- шение объ- екта
    В
    ар иа нт
    3
    Треугольник:
    (1, 1, 0) (1, 0, 1) (0, 1, 1)
    Четырехугольник:
    (0.8, 0.7, 1) (-0.8, 0.7, 1)
    (-0.8, -0.7, -0.8) (0.8, -0.7, -0.8)
    Треугольник:
    (0, 0.5, -0.5) (-0.5, 0, -0.5) (0.5, 0, 0.5)
    -0.85,
    0.85
    -0.7, 0.7 6, 12
    Вокруг
    OX:
    -25
    Вокруг
    OY:
    60
    Куб повора- чивается при нажатии на некоторую клавишу на заданный угол
    В
    ар иа нт
    4
    Треугольник:
    (1, 1, 1) (-1, 0, -1) (1, -1, 1)
    Треугольник:
    (-0.7, -0.7, 0) (-0.7, 0.7, 0) (0.7, 0, 0)
    Треугольник:
    (0, 0, -0.9) (-1, -0.8, 0.5) (1, 1, 1)
    -0.8, 0.8
    -0.9, 0.9 3, 8
    Вокруг
    OX:
    -15
    Вокруг
    OY:
    65
    Куб переме- щается: уда- ление или приближе- ние
    В
    ар иа нт
    5
    Квадрат:
    (-0.6, -0.6 , -0.2) (0.6, -0.6, -0.2)
    (0.6, 0.6, -0.2) (-0.6, 0.6, -0.2)
    Квадрат:
    (-0.5, 0.8, -0.8) (-0.5, 0.8, 0.8)
    (-0.5, -0.8, 0.8) (-0.5, -0.8, -0.8)
    Треугольник:
    (-1, -1, 0) (0, 1, 1) (1, 0, 0)
    -1, 0.9 0.9, 1 2, 9
    Вокруг
    OX:
    35
    Вокруг
    OY:
    50
    Изменяется способ про- ецирования: прямая или перспектив- ная проек- ции

    40
    Дополнительные задания
    1.
    Написать программу для построения тетраэдра в выбран- ной проекции, пользуясь командой рисования ленты треугольни- ков. Реализовать изображение тетраэдра: а) каркасно; б) с залив- кой так, чтобы лицевые грани изображались красным цветом, а обратные – синим.
    2.
    Изобразить октаэдр. Реализовать вращение октаэдра от- носительно его центра симметрии.
    3.
    Изобразить трехмерную лестницу, пользуясь операцией сдвига.
    4.
    Изобразить винтовую лестницу.
    Контрольные вопросы
    1.
    Для чего применяется буфер глубины?
    2.
    Каким образом выводятся фигуры при отключенном тесте глубины?
    3.
    Какие способы проецирования существуют?
    4.
    Чем различаются различные способы проецирования?
    5.
    Какой способ проецирования целесообразно использовать для построения реалистичных изображений?
    6.
    Какой способ проецирования удобен при построении чер- тежей?
    7.
    Что такое видовые параметры и как они применяются?
    8.
    С какой целью в командах, устанавливающих видовые параметры, используются плоскости отсечения?
    Лабораторная работа № 5
    КВАДРИК-ОБЪЕКТЫ. КАМЕРА
    Цель работыисследование возможностей моделирования графических объектов с использованием квадрик-объектов биб- лиотеки OpenGL; установка и использование камеры; исследова- ние и сравнительный анализ результатов, полученных при пере- мещении камеры и при перемещении объекта.

    41
    Порядок выполнения работы
    Перед выполнением работы следует ознакомиться с относя- щимся к ней теоретическим материалом.
    Задания выполняют последовательно, в соответствии с вари- антом, указанным преподавателем.
    В задании 2 требуется изобразить сложный трехмерный объ- ект с использованием квадрик-объектов библиотеки glu OpenGL.
    Рекомендуется использовать при моделировании изображения квадрик-объекты различных типов.
    Необходимые теоретические сведения
    Для работы со стандартными трехмерными объектами в
    OpenGL используются команды библиотеки GLU, которая реа- лизована в виде модуля glu32.dll. Эта библиотека содержит не- сколько функций управления проекциями, функции работы с по- лигонами, кривыми и сплайновыми поверхностями и другие функции.
    Квадрик-объекты. Для изображения цилиндров и конусов используется примитив gluCylinder, для изображения сферы –
    gluSphere, для изображения диска – gluDisk, для изображения час- ти диска – gluPartialDisk.
    Перечисленные примитивы являются квадрик-объектами
    (quadric objects) и изображают соответствующие геометрические тела с помощью аппроксимации плоскими гранями. Поэтому при задании таких объектов указывают число разбиений объекта на грани по различным направлениям, причем чем больше число разбиений, тем более гладким получится изображение объекта.
    Для работы с командами библиотеки GLU вводится пере- менная специального типа
    5
    :
    GLUquadricObj *quadricObj
    Функция gluCylinder имеет шесть параметров: quadricObj – указатель на квадрик-объект; R – первый радиус (центр этого ос- нования цилиндра расположен в начале координат); r – второй радиус; H – длина; slices – число продольных граней (число вер-
    5
    В Delphi переменную-указатель на квадрик-объект объявляют так: quadricObj: GLUquadricObj;

    42 шин многоугольника, являющегося основанием цилиндра); stacks
    – число разбиений по длине (рис. 4): gluCylinder(quadricObj, R, r, H, slices, stacks)
    Функция gluSphere имеет четыре параметра: quadricObj – указатель на квадрик-объект; R – радиус сферы; slices – число параллелей; stacks – число меридианов (рис. 5): gluSphere(quadricObj, R, slices, stacks)
    Функция gluDisk рисует диск или кольцо и имеет пять пара- метров: quadricObj – указатель на квадрик-объект; r – внутрен- ний радиус; R – внешний радиус; slices – число секторов; stacks – число концентрических колец (рис. 6): gluDisk(quadricObj, r, R, slices, stacks)
    r=0
    R=1
    H=1.5
    r=1
    R=1
    H=1.5
    Рис. 4. Результат работы команды gluCilinder
    Slices=10
    Stacks=10
    Рис. 5. Результат работы команды gluSphere в каркасном режиме

    43
    Функция gluPartialDisk рисует часть диска или кольца и име- ет семь параметров: первые пять имеют тот же смысл, что и в предыдущей функции; A – начальный угол; SA – угол развертки
    (диск располагается в плоскости xOy, его центр совпадает с на- чалом координат, начальный угол отсчитывается по часовой стрелке от положительного направления оси Y, углы измеряются в градусах): gluPartialDisk(quadricObj, r, R, slices, stacks, A, SA)
    Для того чтобы нарисовать квадрик-объект, сначала следует вызвать функцию gluNewQuadric (которая создает в динамиче- ской памяти указатель на объект), а после рисования объекта – освободить память вызовом функции gluDeleteQuadric. Между указанными функциями заключается блок рисования квадрик- объекта:
    GLUquadricObj *quadricObj quadricObj=gluNewQuadric();
    …….
    // рисуем объект quadricObj gluDeleteQuadric (quadricObj);
    Объекты данного типа располагаются в пространстве в цен- тре координат с учетом матрицы GL_MODELVIEW. Поэтому, чтобы нарисовать изображение объекта в нужном месте, необхо- димо соответствующим образом изменить эту матрицу, напри- мер, с помощью функций glTranslate и glRotate. Указанные ко- манды располагаются внутри блока рисования квадрик-объекта.
    Slices=10
    Stacks=3
    GLU_LINE
    Команда gluPartialDisk
    GLU_SILHOUETTE
    GLU_FILL
    Slices=10
    GLU_FILL
    Рис. 6. Различные варианты использования команд gluDisk и gluPartialDisk

    44
    На базе одного квадрик-объекта можно строить сколько угодно фигур, не обязательно для каждой из них создавать собст- венный объект, если их параметры идентичны (например, при рисовании нескольких сфер, нескольких дисков, цилиндра и ко- нуса). Однако следует иметь в виду, что объекты рисуются всегда в начале координат, поэтому необходимо корректно использовать команды glPushMatrix и glPopMatrix при преобразованиях сис- темы координат.
    По умолчанию каждый квадрик-объект рисуется со сплошным заполнением. Изменить стиль показа можно вызовом функции
    gluQuadricDrawStyle, указав стиль показа: GLU_POINT – в виде точек, расположенных в вершинах многоугольников; GLU_LINE – каркасное изображение; GLU_FILL – сплошное заполнение;
    GLU_SILHOUETTE – силуэт, контур (разновидность каркасного).
    В дополнительной библиотеке GLUT (заголовочный файл
    glut.h) имеются команды рисования сферы (каркасное изображение сферы – glutWireSphere, сплошное изображение – glutSolidSphere), конуса (glutWireCone, glutSolidCone), тора (glutWireTorus, glutSolid-
    Torus), чайника (glutWireTeapot, glutSolidTeapot). Здесь же имеются команды для рисования правильных многогранников: тетраэдра
    (glutWireTetrahedron, glutSolidTetrahedron), куба (glutWireCube,
    glutSolidCube), октаэдра (glutWireOctahedron, glutSolidOctahedron), додекаэдра (glutWireDodecahedron, glutSolidDodecahedron), икоса- эдра (glutWireIcosahedron, glutSolidIcosahedron).
    Библиотека GLU содержит удобные команды для задания перспективы и моделирования камеры.
    Перспектива. При выполнении предыдущей работы исполь- зовались параллельная (glOrtho) и центральная (glFrustum) про- екции для задания перспективы.
    В библиотеке GLU для этой цели служит функция gluPer-
    spective, имеющая следующие четыре параметра: fovy – верти- кальный угол конуса обзора; aspect – отношение размера области графического вывода по горизонтали к размеру по вертикали;
    near – расстояние до передней плоскости отсечения; far – рас- стояние до задней плоскости отсечения: gluPerspective(fovy, aspect, near, far)
    Для задания области отсечения графического вывода исполь- зуется функция glViewPort.

    45
    Моделирование камеры. В OpenGL точка обзора по умолча- нию располагается в центре координат. Направление зрения – вдоль оси Z противоположно ее направлению (т.е. все, что рису- ется, мы видим из центра координат).
    Для моделирования камеры можно использовать видовые преобразования (матрица MODELVIEW): glMatrixMode(GL_MODELVIEW);
    //
    видовая матрица glLoadIdentity(); //
    установим единичную матрицу glTranslatef(0, 0, -10); //
    сдвиг по оси
    Z вглубь экрана glRotatef(27, 1, 0, 0);
    //
    поворот вокруг оси
    X glRotatef(-19, 0, 1, 0); //
    поворот вокруг оси
    Y
    Теперь наблюдатель (камера) как бы находится на расстоя- нии 10 единиц от центра координат (значит, от плоскости изо- бражения), причем повернута относительно вертикали на 27 ° и развернута в горизонтальной плоскости на 19 °. При этом камера всегда смотрит в центр координат.
    Для моделирования камеры, которая направлена в произволь- ную точку пространства и расположена в заданном месте, удобно использовать функцию библиотеки GLU – gluLookAt, например: glMatrixMode(GL_MODELVIEW); //
    видовая матрица glLoadIdentity(); //
    установим единичную матрицу gluLookAt (x, y, z, //
    местоположение камеры xp, yp, zp, //
    камера смотрит в
    эту точку
    0, 1, 0); //
    направление вектора
    «
    вверх
    »
    Функция имеет девять параметров: первые три определяют координаты местоположения камеры; вторая тройка параметров задает координаты точки, в которую нацелена камера; последние три – направление вектора «вверх» – используются для поворо- тов изображения в плоскости проецирования. Например, gluLookAt (x, y, z, xp, yp, zp, 1, 0, 0) определяет поворот изображения на 90 ° (обычно Вы фотографи- руете, держа фотоаппарат горизонтально, но иногда бывает удоб- нее развернуть его вертикально, чтобы сфотографировать, напри- мер, высокое дерево – такой поворот и имеется в виду в примере).
    Направление вектора «вверх» может быть любым, но не должно быть параллельно вектору нормали к плоскости наблю- дения. Удобным является выбор вектора «вверх» параллельным оси Y, т.е. (0, 1, 0).

    46
    Задания к работе
    1. Установить перспективу в соответствии с вариантом.
    2. Пользуясь командами библиотеки glu изобразить рису- нок в соответствии с вариантом.
    3. Установить камеру таким образом, чтобы она была на- правлена в центр Вашего изображения.
    4. Реализовать перемещение камеры относительно объекта:

    объезд камеры вокруг объекта;

    приближение/удаление камеры относительно объекта.
    5. Реализовать движение объекта относительно камеры:

    движение объекта влево/вправо относительно камеры;

    вращение объекта вокруг своей оси.
    Варианты к заданиям
    Вариант 1.
    Угол вертикального обзора: 45 °.
    Расстояние до передней плоскости отсечения: 3
    Расстояние до задней плоскости отсечения: 10
    Объект «Космический корабль»
    Вариант 2.
    Угол вертикального обзора: 40 °.
    Расстояние до передней плоскости отсечения: 5
    Расстояние до задней плоскости отсечения: 10
    Объект «Солнечная система»
    Вариант 3.
    Угол вертикального обзора: 30 °.
    Расстояние до передней плоскости отсечения: 6
    Расстояние до задней плоскости отсечения: 12
    Объект «Тележка»
    Вариант 4.
    Угол вертикального обзора: 25 °.
    Расстояние до передней плоскости отсечения: 3
    Расстояние до задней плоскости отсечения: 8
    Объект «Настольная лампа»
    Вариант 5.
    Угол вертикального обзора: 35 °.
    Расстояние до передней плоскости отсечения: 2
    Расстояние до задней плоскости отсечения: 9
    Объект «Ваза»

    47
    Дополнительные задания
    1.
    С помощью квадрик-объектов изобразить баскетбольную корзину и мячик, попадающий в нее из некоторой точки, а затем падающий вниз.
    2.
    С помощью квадрик-объектов изобразить выпуклую по- верхность планеты и комету, летящую по параболе к горизонту планеты (комета должна иметь хвост).
    3.
    С помощью квадрик-объектов изобразить мыльные пузы- ри, выдуваемые из кольца (пузыри растут и разлетаются в слу- чайных направлениях, а затем лопаются).
    Контрольные вопросы
    1.
    Что понимается под термином «квадрик-объект»?
    2.
    Какие библиотеки OpenGL предоставляют возможности использования квадрик-объектов? Какие квадрик-объекты Вам известны?
    3.
    Какие действия необходимо описать в программе, чтобы квадрик-объект был изображен?
    4.
    Как определяется положение квадрик-объекта в про- странстве?
    5.
    Сколько фигур может быть построено на базе данного квадрик-объекта?
    6.
    Какие стили заполнения квадрик-объектов Вам известны?
    Какая команда используется для изменения стиля заполнения квадрик-объекта?
    7.
    Каким образом устанавливается перспектива с помощью библиотеки GLU?
    8.
    Какая команда библиотеки GLU служит для моделирова- ния камеры? Какие параметры имеет эта команда и каково их на- значение?
    9.
    Каково назначение вектора «вверх»?
    10.
    Каким образом моделируется камера в отсутствие биб- лиотеки GLU?

    48
    Лабораторная работа № 6
    ОСВЕЩЕНИЕ
    Цель работы – знакомство с возможностями библиотеки
    OpenGL для задания параметров освещения сцены; анализ раз- личных вариантов освещения.
    Необходимые теоретические сведения
    Перед выполнением заданий данной работы необходимо по- вторить сведения, относящиеся к цветовой модели RGB (лекция
    4), изучить теоретический материал, связанный с различными уровнями визуализации (лекция 15), с учетом свойств материала объектов при их изображении; различия методов Гуро и Фонга
    (лекция 16) [7].
    OpenGL вычисляет цвет каждого пикселя в результирующей, отображаемой сцене, содержащейся в буфере кадра. Часть этого расчета зависит от того, какое освещение используется в сцене и как объекты сцены отражают и поглощают свет. В качестве при- мера вспомните, что океан (или море, или река – любой водоем) имеет различный цвет в солнечный или в облачный день. При- сутствие света или облаков определяет, будет ли вода выглядеть ярко-синей или грязно-зеленой. По правде говоря, большинство объектов вообще не выглядят трехмерными, если они не освеще- ны. Скажем, неосвещенная сфера ничем не отличается от дву- мерного круга. Освещение любого объекта зависит от двух фак- торов: первый – это материал, из которого сделан объект, второй
    – это свет, которым он освещен.
    1   2   3   4   5   6   7


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