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

  • ГЕОМЕТРИЧЕСКОЕ МОДЕЛИРОВАНИЕ И ОТОБРАЖЕНИЕ ДВУХМЕРНЫХ ОБЪЕКТОВ СРЕДСТВАМИ ОТКРЫТОЙ ГРАФИЧЕСКОЙ БИБЛИОТЕКИ

  • ПРОЕКТИРОВАНИЕ ГРАФИЧЕСКОЙ СЦЕНЫ

  • СОЗДАНИЕ ГЕОМЕТРИЧЕСКИХ ФОРМ

  • Определение состава объекта

  • Наимено- вание Идентификатор в OpenGL Чем задается

  • Определение координат характерных вершин объекта

  • Номер вершины i

  • Координата x

  • Координата y

  • 2.3 Выбор команд библиотеки для отображения объекта

  • Геом моделирование 2D объектов бис бис (1). У геометрическое моделирование и отображение двухмерных объектов средствами открытой графической библиотеки


    Скачать 0.74 Mb.
    НазваниеУ геометрическое моделирование и отображение двухмерных объектов средствами открытой графической библиотеки
    Дата25.06.2020
    Размер0.74 Mb.
    Формат файлаdocx
    Имя файлаГеом моделирование 2D объектов бис бис (1).docx
    ТипУчебное пособие
    #132663
    страница1 из 4
      1   2   3   4

    ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ



    Ю.Н. Косников






    У
    ГЕОМЕТРИЧЕСКОЕ МОДЕЛИРОВАНИЕ И ОТОБРАЖЕНИЕ ДВУХМЕРНЫХ ОБЪЕКТОВ СРЕДСТВАМИ ОТКРЫТОЙ ГРАФИЧЕСКОЙ БИБЛИОТЕКИ

    Учебное пособие

    П е н з а 2014


    ДК 681.3

    Косников Ю.Н.


    Геометрическое моделирование и отображение двухмерных объектов средствами открытой графической библиотеки. Учебное пособие. – Пенза: Пензенский государственный университет, 2014. – 62 с.

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

    СОДЕРЖАНИЕ

    Предисловие …………………...……………..………………...… стр.

    4

    Введение …………………………………………….……………….…

    5




    1

    Проектирование графической сцены ……………………………

    7




    2

    Создание геометрических форм ………………………...……….

    9







    2.1

    Определение состава объекта ………………………………

    9







    2.2

    Определение координат характерных вершин объекта ……

    13







    2.3

    Выбор команд библиотеки для отображения объекта ……

    14







    2.4

    Выбор цветовых решений ……………….…………….…….

    15







    2.5

    Запись программы ……………….……………….…..………

    17







    2.6

    Задание по созданию геометрических форм для самостоятельного выполнения (углубленное задание) ….....


    18




    3

    Расстановка графических объектов в сцене …………….……..

    19







    3.1

    Дисплейный список ……………….………………….……….

    19







    3.2

    Команды геометрических преобразований ………….………

    20







    3.3

    Расстановка объектов в сцене с применением дисплейных списков ……………….……………….…………………….…


    22







    3.4

    Использование стековой памяти ……………….……………

    23







    3.5

    Расстановка объектов по глубине ……………….………...…

    26







    3.6

    Задание по расстановке объектов для самостоятельного выполнения (углубленное задание) …………………………


    27




    4

    Наложение текстуры на двухмерные объекты …………….…..

    29







    4.1

    Процесс наложения текстуры ……………….…………….….

    29







    4.2

    Разработка закона текстурирования ……………….………...

    30







    4.3

    Программирование наложения текстуры …………………....

    33







    4.4

    Дополнительные возможности текстурирования ………..….

    37







    4.5

    Задание по текстурированию для самостоятельного

    выполнения (углубленное задание) …………………..……..


    39




    5

    Отображение динамических сцен ……………………….……….

    40







    5.1

    Описание динамики объектов ……………….……………….

    40







    5.2

    Программирование динамики графических объектов …..….

    48




    Приложение А. Структура типовой графической программы и назначение ее компонентов …………………………………….….…..


    50




    Приложение Б. Контрольные задания по геометрическому моделированию и отображению двухмерных объектов ………….…


    56




    Список литературы ……………………………………………………

    62




    ПРЕДИСЛОВИЕ

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

    Библиотека имеет хорошо продуманную организацию: она включает базовый набор команд, который не меняется со временем, а в процессе совершенствования библиотеки к нему добавляются дополнительные наборы – расширения(GLU,GLUT,GLAUX и другие). Такое строение библиотеки облегчает ее освоение, что и обусловило ее выбор в качестве графического инструмента учебного назначения.

    Описанию средств библиотеки OpenGL посвящено много книг и сайтов сети интернет. Однако зачастую применение команд библиотеки описывается по принципу «делай как я», то есть без пояснений. В то же время разработка графическихпрограмм, в том числе написанных с применением OpenGL, подчинена определенной логике, которую программист должен понимать. В учебном пособии описаны последовательные шаги разработки графической программы, предназначенной для отображения двухмерных сцен. Все конструкции программы снабжены достаточно подробными пояснениями. Свое понимание приемов рисования двухмерной сцены студенты могут проверить с помощью контрольных заданий. Для желающих освоить графические процедуры более глубоко даны усложненные задания, а также рекомендации по отображению динамических сцен.

    Библиотека OpenGL объемна и разнообразна. С помощью учебного пособия студенты могут получить первый опыт по ее применению. Более глубокие знания можно почерпнуть из информационных источников, приведенных в конце пособия. Автор с благодарностью примет критику и предложения по электронной почте: jkos@pnzgu.ru.
    ВВЕДЕНИЕ
    В геометрическом моделировании и компьютерной графике с помощью двухмерных (плоских) объектов представляют результаты решения многих практических задач. Это отображение графиков и диаграмм, планов и карт, диспетчерской обстановки и мнемосхем. Двухмерные объекты привязаны к некоторой плоскости, которую можно назвать картинной или экранной. Каждая точка объекта имеет две координаты, обозначаемые обычно х и у. Можно представить плоский объект и в трехмерном пространстве, где третья координата (координата z) всех его точек одинакова, как правило, z=0.

    Множество объектов, которые относятся к решаемой в данный момент задаче, и последовательно или параллельно во времени предъявляются наблюдателю, называют сценой. Ясно, что любую сцену, содержащую двухмерные объекты, можно нарисовать в графическом редакторе. Однако такая сцена будет статичной. В лучшем случае, объекты можно заставить двигаться по раз и навсегда заданной траектории. Для этого служит сценарная анимация. Если же возникает задача управлять движением объектов сцены извне, следить за их эволюциями во времени, то приходится прибегать к программированию.

    Программирование графики – непростое дело, и для его облегчения специалистами созданы предметно-ориентированные средства. Это графические библиотеки. В их состав входят готовые графические процедуры – команды. Каждая команда выполняет какую-то графическую операцию: задает режим рисования, описывает форму объекта или его цвет, управляет местоположением и наклоном объекта, накладывает на него сделанный заранее узор и т.д. Команды графических библиотек встраиваются в программы, написанные на языках высокого уровня, и в сочетании с их возможностями позволяют отображать динамические сцены.В настоящее время наибольшей популярностью пользуются две графические библиотеки: DirectX, разработанная фирмой Microsoft, иOpenGL, созданная корпорацией SiliconGraphicsInc.

    В процессе проектирования графической сцены необходимо решить четыре основные задачи:

    • описание геометрической формы объектов;

    • расстановку объектов в статической сцене;

    • наложение на фон и объекты сцены характерного узора (текстуры);

    • изменение геометрических характеристик сцены во времени.

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

    В процессе изучения материала студенты могут самостоятельно написать графическую программу. В первом приложении к учебному пособию помещена «заготовка» правильно написанной программы (в среде Delphi). Ее начало и конец, соответственно, задают и закрывают графические режимы, используемые командами библиотеки. При выполнении индивидуальных заданий они могут быть скопированы. В средней части заготовки оставлено место для команд, рисующих конкретную сцену. Эти команды определяются и вставляются в программу студентами. Во втором приложении к учебному пособию содержатся примеры заданий на отображение двухмерных объектов.

    1. ПРОЕКТИРОВАНИЕ ГРАФИЧЕСКОЙ СЦЕНЫ


    Сцена представляет собой совокупность объектов, имеющих заданные форму, расположение и внешний вид. Описание сцены «закладывается» в компьютер в виде набора графических команд с обоснованно выбранными параметрами. Прежде чем будет определен этот набор команд, нужно принять решения по внешнему виду и параметрам сцены, то есть спроектировать ее.

    Проектирование имеет смысл начинать с выбора системы координат. Библиотека OpenGL по умолчанию вводит декартову трехмерную систему координат, которая называется мировой (МСК). Начало МСК размещается в центре кубического объема видимости, оси МСК направлены так: ось х – вправо, ось у – вверх, ось z– на наблюдателя. Размеры куба видимости по умолчанию составляют ±1 по каждой координатной оси. Объекты, размещаемые за пределами куба, не видны наблюдателю, а объекты, лежащие на границах куба, отсекаются его плоскостями и видны частично. Наблюдатель по умолчанию размещается в начале координат, а его взор направлен вдоль отрицательной полуоси z. В этом случае плоские объекты располагаются в плоскости z=0. Для отображения большинства двухмерных сцен достаточно работать с такими установками.

    Система координатных отсчетов МСК может быть изменена командой

    glOrtho(left,right,bottom,top,near,far);.

    Она вводит параллелепипед видимости, координаты четырех плоскостей которого – левой, правой, нижней и верхней относительно наблюдателя –

    – задаются параметрами команды left,right,bottom и top, соответственно. Параметры near и far определяют удаление ближней и дальней плоскостей параллелепипеда от наблюдателя. Если эти плоскости находятся «за спиной» наблюдателя, то соответствующие параметры принимают отрицательные значения. Это особенность параллельной (ортографической) проекции объектов в OpenGL: она позволяет наблюдателю видеть все объекты, попавшие внутрь объема видимости, в том числе и находящиеся за спиной. Исходное положение куба видимости устанавливается командой

    glOrtho(-1,1,-1,1,-1,1); .

    Таким образом, пространство, в котором работает библиотека OpenGL, – трехмерное, но при проектировании плоских сцен его можно считать двухмерным и представлять как квадратное окно с размерами 2×2 условные единицы. Начало МСК – в центре окна, оси идут вправо (ось х) и вверх (ось у). Окно можно представить как результат сечения куба видимости плоскостью, перпендикулярной оси глубины. В этом двухмерном окне размещаются объекты сцены.

    С
    проектировать сцену – значит определить форму, размеры, состав и внешний вид объектов, а также разместить их в окне вывода. Удобно проектировать сцену визуально, то есть рисовать ее в масштабе с привязкой к окну вывода. Пусть сцена содержит три однотипных объекта в виде стрелок. Их геометрические и видовые параметры могут быть различными и в рассматриваемом примере выбраны так, как показано на рисунке 1.

    Размеры центральной стрелки на рисунке 1 по каждой координате в два раза больше размеров двух других стрелок, хотя форма всех стрелок (соотношение размеров) одинакова.

    1. СОЗДАНИЕ ГЕОМЕТРИЧЕСКИХ ФОРМ


    В процессе выполнения этой работы необходимо:

    • определить состав объекта, выделив в нем геометрические примитивы;

    • поместить объект в выбранную систему координат;

    • определить координаты характерных точек каждого геометрического примитива в выбранной системе координат;

    • выбрать команды библиотеки OpenGL, пригодные для отображения каждого примитива, и задать параметры этих команд;

    • выбрать цветовые решения для фона (окна вывода) и примитивов с целью повышения наглядности отображения в процессе отладки программы;

    • записать фрагменты программы.




      1. Определение состава объекта

    Объекты сложной конфигурации в компьютерной графике представляются в виде сочетания простых фигур – геометрических примитивов. Примитивы задаются своими характерными точками. Библиотека OpenGL располагает целым набором таких примитивов, которые перечислены в таблице 1. Там же показаны способы описания этих примитивов и принципы их отображения.

    Таблица 1 – Геометрические примитивы библиотеки OpenGL

    Наимено-

    вание

    Идентификатор

    в OpenGL

    Чем задается

    Принцип

    отображения

    Единичные примитивы

    Точка

    GL_POINTS

    Координатами точки

    По заданным координатам засвечивается один или несколько пикселей экрана

    Отрезок

    GL_LINES

    Координатами начальной и конечной точек

    Начальная и конечная точки соединяются прямолинейным отрезком

    Треугольник

    GL_TRIANGLES

    Координатами трех угловых точек

    Каждая последующая точка соединяется прямолинейным отрезком с предыдущей точкой в последовательности задания этих точек в программе

    Четырех-

    угольник

    GL_QUADS

    Координатами четырех угло-вых точек

    То же

    Многоуголь-ник

    (N-угольник)

    GL_POLIGON

    Координатами

    N угловых то-чек

    То же

    Последовательности примитивов

    Ломаная

    линия

    GL_LINE_STRIP

    Первый отрезок ломаной зада-етсякоордина-тами начальной и конечной то-

    чек, каждый последующий отрезок – координатами конечной точки

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

    Замкнутый

    контур

    GL_LINE_LOOP

    Так же, как ломаная линия

    Так же, как для ломаной линии, но конечная точка автоматически соединяется с первой прямолинейным отрезком

    Стриптре-

    угольников

    GL_TRIANGLE_

    STRIP

    Первый

    треугольник задается

    координатами трех угловых точек, каждый последующий – координатами одной точки

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

    Веер тре-угольников

    GL_TRIANGLE_

    FAN

    Так же, как стриптре-угольников

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

    Стрип

    четырех-угольников

    GL_QUAD_

    STRIP

    Первый четы-рехугольник задается координатами четырех точек, каждый последующий – координатами двух угловых точек

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

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



    На рисунке показано, что примитивы, являющиеся многоугольниками, закрашиваются. Следует обратить внимание на различные законы рисования четырехугольника и последовательности четырехугольников. Чтобы четырехугольник в обоих случаях рисовался правильно, его характерные точки нужно задавать в первом случае, последовательно обходя периметр, а во втором случае – «попарно», как показано на рисунке 2.

    П ри разбиении объекта на примитивы нужно стремиться к максимально простому решению. Очевидно, что рассматриваемый в качестве примера объект – стрелка – может быть составлен из двух раздельных примитивов: четырехугольника и треугольника. Можно использовать и примитив-полигон. Каждый примитив задается характерными точками, в OpenGL они называются вершинами (Vertex). Есть два принципиально различных способа размещения примитивов объекта в окне вывода. По первому способу каждый примитив описывается координатами своих вершин в МСК. Для этого координаты вершин должны быть рассчитаны, получены путем измерения или найдены иным образом по усмотрению проектировщика. Найти координаты не всегда бывает просто, например, координаты «носика» повернутой стрелки на рисунке 1. В соответствии со вторым способомдля описания объекта вводится вспомогательная объектная система координат (ОСК). По умолчанию она совпадает с МСК. Примитивы объекта размещаются в ОСК максимально простым образом. Например, стрелка может быть размещена так, как показано на рисунке 3.


    Т огда почти половина координат характерных вершин объекта принимает нулевое значение, причем эти вершины располагаются симметрично относительно оси хо, что облегчает поиск остальных координат.При использовании такого способа описания объекта его желаемое расположение в МСК достигается сдвигом и поворотом всей ОСК. Для этого в библиотеке OpenGL есть средства, рассмотренные далее. Например, повернутая стрелка, изображенная на рисунке 1 и размещенная в своей ОСК в соответствии с рисунком 3, будет располагаться в МСК так, как показано на рисунке 4.



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


      1. Определение координат характерных вершин объекта

    Если графический объект является образом реального объекта, найти координаты его характерных точек в ОСК несложно. Нужно просто спроецировать его в масштабе в СКО. В другом случае координаты вершин понятны из их расстановки в ОСК. В любом случае проектировщик выполняет эту работу, исходя из каких-то своих соображений. Пусть в рассматриваемом примере координаты семи вершин стрелки (вершины помечены на рисунке 3 номерами) имеют значения, приведенные в таблице 2.

    Таблица 2 – Координаты вершин объекта-стрелки в ОСК

    Номер вершины i

    1

    2

    3

    4

    5

    6

    7

    Координата xi

    -0,4

    0

    0

    -0,4

    0

    -0,4

    0

    Координата yi

    0,2

    0,2

    -0,2

    -0,4

    0,4

    0

    -0,4

    2.3 Выбор команд библиотеки для отображения объекта

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

    glVertex2f(х,у); или glVertex3f(х,у,z);

    Число 2 или 3 указывает, в каком пространстве – двухмерном или трехмерном – представляется вершина. Буква fозначает тип параметра, в данном случае с плавающей точкой (float), но может использоваться и другой тип:i – целый,d – двойной точности и др. В скобках помещаются параметры команды, это две или три координаты вершины. Они могут задаваться константами, например, glVertex3f(0.5,-0.4,0.0); или переменными. Во втором случае переменные до использования их в команде glVertex должны получить численные значения.

    Тип геометрического примитива задается в качестве параметра команды, которая представляет собой пару операторных скобок:

    glBegin(<параметр>);

    . . .

    glEnd();

    В качестве параметра используется идентификатор примитива из таблицы 1. Между операторными скобками помещаются команды glVertex, задающие координаты характерных вершин. Например, команды

    glBegin(GL_TRIANGLES);glVertex2f(0.0,0.4);

    glVertex2f(0.4,0.0);

    glVertex2f(0.0,-0.4);glEnd();

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

    Пара скобок glBegin – glEnd заносит описываемое в ней изображение (в виде кодов цветояркости) в буфер кадра видеосистемы компьютера. При опросе буфера по закону растра это изображение выводится на экран. Следовательно, можно считать, что скобки glBegin – glEnd рисуют изображение, только не на экране, а пока в памяти компьютера.

    В одной паре скобок glBegin – glEnd можно описать несколько однотипных примитивов. Так, наборкоманд

    glBegin(GL_LINES);

    glVertex2f(0.0,0.0);

    glVertex2f(0.1,0.1);

    glVertex2f(0.4,0.1);

    glVertex2f(0.3,0.0);

    glVertex2f(0.5,0.5);

    glEnd();

    рисует два прямолинейных отрезка, заданных первой–второй и третьей–четвертой командами glVertex, а пятая команда glVertex игнорируется, так как описываемой ей вершине нет «пары».


      1. Выбор цветовых решений

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

    glClearColor(R,G,B,A);

    где R,G,B – доли красного, зеленого и синего основных цветов в цвете фона (лежат в диапазоне от 0 до 1), А – коэффициент прозрачности фона (0 – прозрачный, 1 – непрозрачный фон). Если использовать только нулевые и единичные значения интенсивности основных цветов, можно задать восемь ярких цветов фона в соответствии с таблицей 3.Пропорционально уменьшая значения интенсивности, можно сделать цвет фона менее насыщенным, например при R=G=B=0,5 получается серый цвет.

    Таблица 3 – Набор цветов, полученный при использовании нулевых и единичных интенсивностей основных цветов

    R

    G

    B

    Цвет

    0

    0

    0

    Черный (black)

    0

    0

    1

    Синий (blue)

    0

    1

    0

    Зеленый (green)

    0

    1

    1

    Бирюзовый (cyan)

    1

    0

    0

    Красный (red)

    1

    0

    1

    Пурпурный (magenta)

    1

    1

    0

    Желтый (yellow)

    1

    1

    1

    Белый (white)


    Окно вывода закрашивается заданным цветом командой

    glClear(GL_COLOR_BUFFER_BIT); ,

    котораязаносит в буфер цвета (буфер кадра) заданные коды цветояркости для всех пикселей окна.

    Для задания цвета пера используется команда

    glColor3f(R,G,B); .

    В ней R,G,B – это тоже доли красного, зеленого и синего цветов, но теперь – в цвете геометрической фигуры. Эта команда устанавливает так называемый текущий цвет пера. Он применяется при рисовании всех объектов, описанных в программе (в скобках glBegin – glEnd) ниже установки этого цвета. В нужный момент текущий цвет пера меняется с помощью повторного применения команды glColor.Например, приведенный ниже фрагмент программы рисует на светло-бирюзовом фоне объект, состоящий из двух разноцветных примитивов: красного треугольника и зеленого четырехугольника.

    glClearColor(0.0,0.5,0.5,1.0); //задание светло-бирюзового цвета фона

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0,0.0,0.0); //задание красного цвета пера

    glBegin(GL_TRIANGLES);

    glVertex2f(x1,y1);

    glVertex2f(x2,y2);

    glVertex2f(x3,y3);

    glEnd();

    glColor3f(0.0,1.0,0.0); //заданиезеленогоцветапера

    glBegin(GL_QUADS);

    glVertex2f(x4,y4);

    glVertex2f(x5,y5);

    glVertex2f(x6,y6);

    glVertex2f(x7,y7);

    glEnd();


      1. Запись программы

    Структура графической программы включает следующие фрагменты:

    •   1   2   3   4


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