Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Cpp.doc
Скачиваний:
6
Добавлен:
20.11.2019
Размер:
603.14 Кб
Скачать

8. Графика OpenGl.

Для работы с графикой в программах, написанных под ОС Windows можно использовать несколько готовых библиотек. В нашем пособии мы обращаемся к библиотеке OpenGL-Open Graphics Library (открытая графическая библиотека). Термин "открытый" - означает независимый от производителей. Библиотеку OpenGL может производить кто угодно, главное, чтобы библиотека удовлетворяла спецификации OpenGL и ряду тестов. Стандарт OpenGL развивается с 1992 года фирмой Silicon Graphics. С тех пор библиотека завоевала огромную популярность и была интегрирована с множеством языков программирования и систем разработки приложений. Несомненными достоинствами OpenGL являются его простота и стандартность – программный код можно легко перенести на другую платформу или под другую операционную систему. Основное предназначение OpenGL - программирование трехмерной графики, хотя в нашем пособие мы ограничимся примерами использования только двумерных графических объектов средствами OpenGL.

В составе операционной системы Windows OpenGL поставляется в виде двух DLL -файлов - opengl32.dll и glu32.dll. Для облегчения использования графических примитивов OpenGL в нашем курсе используется заголовочный файл xgl.h, написанный С.А. Юзвовичем.

Для подключения библиотек OpenGL, необходимо настроить проект. Пользователям Microsoft Visual C++ 6.0 следует зайти в настройки проекта, пункты меню Project->Settings (или сочетание клавиш Alt+F7) .

На закладке Link в графе Object/library modules указать несколько “линкуемых” (т.е. подключаемых на стадии редактирования) библиотек через пробел: opengl32.lib glu32.lib glaux.lib (данные библиотеки входят в состав Visual C++).

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

#include "xgl.h" // подключаем заголовочный файл для работы с библиотекой OpenGL.

// Функция рисования.

Void callback Draw()

{

glColor3f(1.0f, 1.0f, 1.0f); // цвет рисования

xglDrawRect(10, 10, 100, 100); // рисуем квадрат

}

// Главная функция

Void main()

{

if( !xglInitWindow(0, 0, 300, 300, "Test XGL") ) // создаем окно вывода графики

{

auxQuit(); // выход в случаи неудачи

}

glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // цвет заливки окна

xglMainLoop(Draw); // запускаем цикл обработки сообщений

}

Выше приведенная программа cоздает окно для вывода графики, заливает его черным цветом и рисует на нем белый квадрат.

Для работы с графикой используется функция Draw. Функция Draw объявлена как CALLBACK (возвращаемая). Это специальный тип функций, который используется для вывода изображений в окно Windows. Данная функция вызывается всякий раз, когда необходимо перерисовать данные в области окна. В этой функции мы определяем что и как должно рисоваться. Причем в внутри функции не рекомендуется использовать какие-либо сложные и длительные вычисления, так как это будет сказываться на скорости рисования ( эта функция может вызываться достаточно часто). Если нужно провести какие-то трудоемкие вычисления то их следует произвести заранее, например, в функции main(). Если необходимо передавать какие либо данные в функцию Draw, то это можно делать через глобальные переменные.

После этого описываем функцию void main(). В этой функции создается окно для вывода графики, задается цвет заливки и запускается цикл обработки сообщений для окна.

Функция bool xglInitWindow(int x, int y, int sx, int sy, char* name) создает окно для вывода графики, принимает следующие параметры:

  • x, y – положение окна,

  • sx, sy – размеры окна,

  • name – название окна, выводится вверху на синей полоске.

Функция void auxQuit() параметров не имеет и производит выход из программы. Вызывается в случаи если неудалось создать окно.

Функция void glClearColor(float red, float green, float blue, float alpha) задает цвет заливки окна, принимает следующие параметры:

  • red – красная компонента цвета, в диапозоне от 0.0 до 1.0,

  • green – зеленая компонента цвета, в диапозоне от 0.0 до 1.0,

  • blue – синяя компонента цвета, в диапозоне от 0.0 до 1.0.

  • alpha – компонента прозрачности, в нашем случае всегда задается 1.0.

Функция bool xglMainLoop(AUXMAINPROC pfDraw) запускает цикл обработки сообщений. В качестве параметра передается имя функции, которая будет вызываться при перерисовке окна:

  • pfDraw – указатель на функцию отрисовки окна (в нашем случае это функция Draw).

Для рисования можно использовать следующие функции, вызываемые внутри функции Draw() :

  • glColor3f(float red, float green, float blue) – устанавливает цвет рисования.

  • xglDrawLine(Float x1, Float y1, Float x2, Float y2) – рисует линию

  • xglDrawPoint(Float x, Float y) – рисует точку

  • xglDrawTriangle(Float x1, Float y1, Float x2, Float y2, Float x3, Float y3) – рисует треугольник

  • xglDrawRect(Float x1, Float y1, Float x2, Float y2) – рисует прямоугольник.

  • xglDrawQuad(Float x1, Float y1, Float x2, Float y2, Float x3, Float y3, Float x4, Float y4) - четырехугольник.

Следует учитывать, что начало системы отсчета находится в левом нижнем углу окна.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]