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

  • Основные возможности

  • Использование В-сплайнов.

  • Освещение

  • Прозрачность объектов. Использование списков изображений. Интерфейс OpenGL

  • Command_name имя команды [1 2 3 4]

  • Основные достоинства OpenGL Стабильность стандарта.

  • Надежность получаемого результата.

  • Переносимость.

  • Реферат_Назаров4410_OpenGL. Компьютерная графика


    Скачать 45.02 Kb.
    НазваниеКомпьютерная графика
    Дата27.03.2022
    Размер45.02 Kb.
    Формат файлаdocx
    Имя файлаРеферат_Назаров4410_OpenGL.docx
    ТипРеферат
    #420561

    Министерство образования и науки Российской Федерации

    Федеральное государственное бюджетное образовательное учреждение

    высшего профессионального образования

    «Российский Экономический Университет им Г.В. Плеханова»
    Высшая школа кибертехнологий, математики и статистики Базовая кафедра цифровой экономики института развития информационного общества
    РЕФЕРАТ

    на тему «OpenGL»

    по дисциплине «Компьютерная графика»

    Выполнил:

    студент группы 291Д-10МО/18

    очной формы обучения

    высшей школы кибертехнологийматематики и статистики

    Назаров Тимур Рафикович

    Москва - 2022

    Оглавление


    Общая характеристика 2

    Основные возможности 4

    Интерфейс OpenGL 5

    Архитектура 7

    Синтаксис команд 9

    Пример приложения 11

    Заключение 17

    Список источников 18


    Общая характеристика


    OpenGL - это графический стандарт в компьютерной графике. В настоящее время он является одним из самых популярных графических стандартов в мире. Ещё в 1982 г. в Стенфорде была разработана концепция графической машины, на основе которой компания Silicon Graphics в своей рабочей станции Silicon IRIS разработала конвейер рендеринга. Таким образом, была разработана графическая библиотека IRIS GL. На основе IRIS GL, в 1992 году был реализован и утверждён стандарт OpenGL. Разработчики OpenGL - это ведущие фирмы разработчики как оборудования так и программного обеспечения: Silicon Graphics, Inc., Microsoft, IBM Corporation, Sun Microsystems, Inc., Digital Equipment Corporation (DEC), Evans & Sutherland, Hewlett-Packard Corporation, Intel Corporation и Intergraph Corporation.

    OpenGL переводится как Открытая Графическая Библиотека (Open Graphics Library), это означает, что OpenGL - это открытый стандарт. Программы, написанные с использованием OpenGL можно переносить практически на любую платформу, без ущерба результату, будь это графическая станция или суперкомпьютер. OpenGL освобождает программиста от подстраивание под конкретное оборудование. Если устройство поддерживает какую-то функцию, то эта функция выполняется аппаратно, если нет, то библиотека выполняет её программно.

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

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

    В некоторых библиотеках OpenGL (например под X Windows) имеется возможность изображать результат не только на локальной машине, но также и по сети. Приложение, которое отрабатывает команды OpenGL называется клиентом, а приложение, которое получает эти команды и отображает результат - сервером. Таким образом можно строить очень мощные воспроизводящие комплексы на основе нескольких рабочих станций или серверов, соединённых сетью.

    Основные возможности


    Геометрические и растровые примитивы. На основе геометрических и растровых примитивов строятся все объекты. Из геометрических примитивов библиотека предоставляет: точки, линии, полигоны. Из растровых: битовый массив (bitmap) и образ (image)

    Использование В-сплайнов. B-сплайны используются для рисования кривых по опорным точкам.

    Видовые и модельные преобразования. С помощью этих преобразований можно располагать объекты в пространстве, вращать их, изменять форму, а также изменять положение камеры из которой ведётся наблюдение.

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

    Удаление невидимых линий и поверхностей. Z-буферизация.

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

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

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

    Освещение. Позволяет задавать источники света, их расположение, интенсивность, и т.д.

    Атмосферные эффекты. Например, туман, дым. Всё это также позволяет придать объектам или сцене реалистичность, а также «почувствовать» глубину сцены.

    Прозрачность объектов.

    Использование списков изображений.

    Интерфейс OpenGL


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

    1)OpenGL Utility Library (GLU) содержит несколько функций, которые используют низкоуровневые команды OpenGL для выполнения таких операций, как установка специфических матриц видовой ориентации и проекций, триангуляции полигонов и визуализации поверхностей. Эта библиотека предоставляется как часть любой реализации OpenGL. Все функции этой библиотеки определены через базовые функции GL. В состав GLU вошла реализация более сложных функций, таких как набор популярных геометрических примитивов (куб, шар, цилиндр, диск), функции построения сплайнов, реализация дополнительных операций над матрицами и т.п.

    2)Для каждой оконной системы существует библиотека, расширяющая возможности этой оконной системы для поддержки OpenGL. Для машин, где используется системы X Window расширения OpenGL (GLX) предоставляются в виде добавочных функций с префиксом glX. Для Microsoft Windows 95/98/Me/NT/200/XP функции WGL предоставляют интерфейс от Windows к OpenGL. Почти все они имеют префикс wgl. Для IBM OS/2 функции менеджера презентаций имеют префикс pgl. Для Apple существует интерфейс AGL, чьи функции имеют соответствующий префикс (agl).

    3)OpenGL Utility Toolkit (GLUT) – это независимая от оконной системы библиотека, написанная Марком Килгардом, чтобы скрыть сложности API различных оконных систем. Все функции библиотеки имеют префикс glut. Исходный код библиотеки GLUT для систем Microsoft Windows 95/98/NT/Me/XP и X Window может быть получен по интернет – адресу http://reality.sgi.com/opengl/glut3/glut3.html. На данной странице

    помимо самого кода содержится информация о текущей версии GLUT.


    Архитектура


    OpenGL ориентируется на следующие две задачи:

    • Скрыть сложности адаптации различных 3D-ускорителей, предоставляя разработчику единый API.

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

    Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и треугольников с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет собой дискретный автомат. Абсолютное большинство команд OpenGL попадает в одну из двух групп: либо они добавляют графические примитивы на вход в конвейер, либо конфигурируют конвейер на различное исполнение трансформаций.

    OpenGL является низкоуровневым процедурным API, что вынуждает программиста диктовать точную последовательность шагов, чтобы построить результирующую растровую графику (императивный подход). Это является основным отличием от дескрипторных подходов, когда вся сцена передается в виде структуры данных (чаще всего дерева), которое обрабатывается и строится на экране. С одной стороны, императивный подход требует от программиста глубокого знания законов трёхмерной графики и математических моделей, с другой стороны — даёт свободу внедрения различных инноваций.

    GL обрабатывает и рисует в буфере кадра графические примитивы с учетом некоторого числа выбранных режимов. Каждый примитив – это точка, отрезок, многоугольник и т.д. Каждый режим может быть изменен независимо от других. Определение примитивов, выбор режимов и другие операции описываются с помощью команд в форме вызовов функций прикладной библиотеки.

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

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

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

    С точки зрения разработчиков, OpenGL – это набор команд, которые управляют использованием графической аппаратуры. Если аппаратура состоит только из адресуемого буфера кадра, тогда OpenGL должен быть реализован полностью с использованием ресурсов центрального процессора. Обычно графическая аппаратура предоставляет различные уровни ускорения: от аппаратной реализации вывода линий и многоугольников до изощренных графических процессоров с поддержкой различных операций над геометрическими данными.


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

    Синтаксис команд


    Определения команд GL находятся в файле gl.h, для включения которого нужно написать

    #include


    Для работы с библиотекой GLU нужно аналогично включить файл glu.h. Версии этих библиотек, как правило, включаются в дистрибутивы систем программирования, например Microsoft Visual C++ или Borland C++ 5.02.

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

    Все команды (процедуры и функции) библиотеки GL начинаются с префикса gl, все константы – с префикса GL_. Соответствующие команды и константы библиотек GLU и GLUT аналогично имеют префиксы glu (GLU_) и glut (GLUT_)

    Кроме того, в имена команд входят суффиксы, несущие информацию о числе и типе передаваемых параметров. В OpenGL полное имя команды имеет вид:

    type glCommand_name[1 2 3 4][b s i f d ub us ui][v]

    (type1 arg1,…,typeN argN)


    Таким образом, имя состоит из нескольких частей:

    Gl

    это имя библиотеки, в которой описана эта функция: для базовых функций OpenGL, функций из библиотек GLU, GLUT, GLAUX это gl, glu, glut, glaux соответственно

    Command_name

    имя команды

    [1 2 3 4]

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

    [b s i f d ub us ui]

    тип аргумента: символ b означает тип GLbyte (аналог char в С\С++), символ f – тип GLfloat (аналог float), символ i – тип GLint (аналог int) и так далее. Полный список типов и их описание можно посмотреть в файле gl.h

    [v]

    наличие этого символа показывает, что в качестве параметров функции используется указатель на массив значений

    Символы в квадратных скобках в некоторых названиях не используются. Например, команда glVertex2i() описана как базовая в библиотеке OpenGL, и использует в качестве параметров два целых числа, а команда glColor3fv() использует в качестве параметра указатель на массив из трех вещественных чисел.

    Использования нескольких вариантов каждой команды можно частично избежать, применяя перегрузку функций языка C++. Но интерфейс OpenGL не рассчитан на конкретный язык программирования, и, следовательно, должен быть максимально универсален.

    Пример приложения


    Типичная программа, использующая OpenGL, начинается с определения окна, в котором будет происходить отображение. Затем создается контекст (клиент) OpenGL и ассоциируется с этим окном. Далее программист может свободно использовать команды и операции OpenGL API.

    Ниже приведен текст небольшой программы, написанной с использованием библиотеки GLUT – своеобразный аналог классического примера “Hello, World!”.

    Все, что делает эта программа – рисует в центре окна красный квадрат. Тем не менее, даже на этом простом примере можно понять принципы программирования с помощью OpenGL.

    #include
    /* подключаем библиотеку GLUT */

    #include
    /* начальная ширина и высота окна */

    GLint Width = 512, Height = 512;
    /* размер куба */

    const int CubeSize = 200;
    /* эта функция управляет всем выводом на экран */

    void Display(void)

    {

    int left, right, top, bottom;
    left = (Width - CubeSize) / 2;

    right = left + CubeSize;

    bottom = (Height - CubeSize) / 2;

    top = bottom + CubeSize;
    glClearColor(0, 0, 0, 1);

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3ub(255,0,0);

    glBegin(GL_QUADS);

    glVertex2f(left,bottom);

    glVertex2f(left,top);

    glVertex2f(right,top);

    glVertex2f(right,bottom);

    glEnd();
    glFinish();

    }
    /* Функция вызывается при изменении размеров окна */

    void Reshape(GLint w, GLint h)

    {

    Width = w;

    Height = h;
    /* устанавливаем размеры области отображения */

    glViewport(0, 0, w, h);
    /* ортографическая проекция */

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glOrtho(0, w, 0, h, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    }
    /* Функция обрабатывает сообщения от клавиатуры */

    void Keyboard(unsigned char key, int x, int y)

    {

    #define ESCAPE '\033'
    if( key == ESCAPE )

    exit(0);

    }
    /* Главный цикл приложения */

    main(int argc, char *argv[])

    {

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB);

    glutInitWindowSize(Width, Height);

    glutCreateWindow("Red square example");
    glutDisplayFunc(Display);

    glutReshapeFunc(Reshape);

    glutKeyboardFunc(Keyboard);
    glutMainLoop();

    }


    Несмотря на малый размер, это полностью завершенная программа, которая должна компилироваться и работать на любой системе, поддерживающей OpenGL и GLUT.

    Библиотека GLUT поддерживает взаимодействие с пользователем с помощью так называемых функций c обратным вызовом (callback function). Если пользователь подвинул мышь, нажал на кнопку клавиатуры или изменил размеры окна, происходит событие и вызывается соответствующая функция пользователя – обработчик событий (функция с обратным вызовом).

    Рассмотрим более подробно функцию main данного примера. Она состоит из трех частей – инициализации окна, в котором будет рисовать OpenGL, настройки функций c обратным вызовом и главного цикла обработки событий.

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

    Функция glutInit(&argc, argv) производит начальную инициализацию самой библиотеки GLUT.

    Команда glutInitDisplayMode(GLUT_RGB) инициализирует буфер кадра и настраивает полноцветный (непалитровый) режим RGB.

    glutInitWindowSize(Width, Height) используется для задания начальных размеров окна.

    Наконец, glutCreateWindow("Red square example") задает заголовок окна и визуализирует само окно на экране.

    Затем команды

    glutDisplayFunc(Display);

    glutReshapeFunc(Reshape);

    glutKeyboardFunc(Keyboard);


    регистрируют функции Display(), Reshape() и Keyboard() как функции, которые будут вызваны, соответственно, при перерисовке окна, изменении размеров окна, нажатии клавиши на клавиатуре.

    Контроль всех событий и вызов нужных функций происходит внутри бесконечного цикла в функции glutMainLoop()

    Заметим, что библиотека GLUT не входит в состав OpenGL, а является лишь переносимой прослойкой между OpenGL и оконной подсистемой, предоставляя минимальный интерфейс. OpenGL-приложение для конкретной платформы может быть написано с использованием специфических API (Win32, X Window и т.д.), которые как правило предоставляют более широкие возможности.

    Все вызовы команд OpenGL происходят в обработчиках событий. Более подробно они будут рассмотрены в следующих главах. Сейчас обратим внимание на функцию Display, в которой сосредоточен код, непосредственно отвечающий за рисование на экране.

    Следующая последовательность команд из функции Display

    glClearColor(0, 0, 0, 1);

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3ub(255,0,0);

    glBegin(GL_QUADS);

    glVertex2f(left,bottom);

    glVertex2f(left,top);

    glVertex2f(right,top);

    glVertex2f(right,bottom);

    glEnd();


    очищает окно и выводит на экран квадрат, задавая координаты четырех угловых вершин и цвет.


    Заключение


    OpenGL – это спецификация, определяющая независимый от языка программирования кросплатформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику. 

    Основные достоинства OpenGL

    • Стабильность стандарта. Возможности OpenGL только расширяются. Функциональность команд, которые были реализованы в предыдущих версиях OpenGL, остаётся без изменения.

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

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

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

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

    В реферате была изучена архитектура и пайплайн библиотеки. На практике была изучена работа с OpenGL с помощью создания легкой программы.


    Список источников



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