Библиотека трехмерной графики Open GL
Оглавление
Оглавление 2
Введение 2
Подготовка файловой системы проекта 3
Подготовка формы проекта 4
Форма сообщений об ошибках 5
Первые команды 7
Класс контекста воспроизведения 7
Класс команд OpenGL. Очистка буфера цвета 14
Структура буферов. Методы Get 17
Примитивы 22
Модуль 0. Точки 22
Модуль 1. Прямые линии 69
Модуль 2. Треугольники 73
Модуль 3. 4-угольники 82
Модуль 4. Многоугольники 87
Remaining 105
Модуль 5. Освещение (lighting) 105
Введение
OpenGL (Open Graphics Library – открытая графическая библиотека) содержит несколько сотен процедур и функций, которые обеспечивают формирование любого 3-мерного образа на экране компьютера. Библиотека OpenGL не требует специальной установки. Все ее процедуры реализованы в файлах opengl32.dll и glu32.dll, поставляемых вместе с OS Windows в каталоге System32.
Полную спецификацию команд, реализованных в модуле opengl32.dll, можно найти на сайте.
Так же на сайте можно найти презентацию этого курса.
В настоящем пособии изложение процедур и функций библиотеки OpenGL сопровождается интерактивными иллюстрациями и примерами конкретного кода на языке C# с применением этих функций. Программный код в целом образует решение (solution), состоящее из отдельных проектов, участвующих в иллюстрирующем приложении.
Читатель может
-
либо ограничиться общим знакомством с командами библиотеки OpenGL,
-
либо пойти дальше и поддерживать свое приложение, тестирующее работу отдельных команд OpenGL, используя для этого примеры, описанные в учебнике,
-
либо, наконец, следуя рекомендациям автора, использовать приведенный им код и участвовать в составлении авторского приложения, иллюстрирующего работу команд OpenGL.
Типичная программа, которая использует команды OpenGL, начинается с создания окна, получающего информацию из области памяти, которая именуется видеобуфером, или буфером кадров (frame buffer). Этому окну сопоставляется специальный контекст воспроизведения (rendering context), необходимый для визуализации работы команд библиотеки OpenGL. Контекст воспроизведения превращает окно в порт вывода команд OpenGL. После создания порта окно готово для визуализации команд OpenGL.
Одни команды OpenGL строят простые геометрические объекты (так называемые примитивы) - точки, сегменты линий, многоугольники. Другие команды определяют внешний вид этих объектов, их цвета, как они освещаются и как проецируются с 3-мерного пространства на 2-мерный экран.
В следующих трех разделах введения описаны технические действия, необходимые для создания приложения, иллюстрирующего работу команд OpenGL.
Подготовка файловой системы проекта
Откройте MS Visual Studio 2008 и создайте пока пустой контейнер (solution), в который будут помещаться приложения, иллюстрирующие работу команд графической библиотеки OpenGL. Для этого
-
В меню File командой New->Project… откройте окно New Project
-
На левой панели Project types: найдите и откройте узел Other Project Types
-
Выберите Visual Studio Solutions.
-
На панели Templates: выберите Blank Solution.
-
В окошке Name имя Solution1, задаваемое средой по умолчанию, замените slOpenGL.
-
В строке Location указана маршрутная строка, где будет располагаться папка с именем slOpenGL, содержащая все файлы, входящие в состав slOpenGL; обычно строка Location соответствует маршруту, выводящему на папку Visual Studio 2008\Projects, но удобнее, чтобы не мешать другим пользователям, работающим в этой же среде, организовать внутри каталога Projects новый каталог со своим именем, сохраняя свои проекты в этом подкаталоге.
-
Нажмите OK.
Добавьте в контейнер slOpenGL два проекта. Для этого
-
Откройте окно Solution Explorer.
-
Вызовите контекстное меню (правая кнопка) над строкой Solution ' slOpenGL' (0 projects).
-
Командой Add->New Project… откройте окно Add New Project.
-
На панели Templates: выберите шаблон Class Library.
-
В окошке Name наберите GL. Это будет имя библиотеки, в которую будут собираться классы графической библиотеки в процессе работы над проектом.
-
Нажмите OK.
-
Чтобы добавить еще один проект, повторите пункты 1-3.
-
На панели Templates: выберите шаблон Windows Forms Application.
-
Дайте имя gl3D. Эти файлы будут главной формой иллюстрирующего приложения.
-
Нажмите OK.
Откройте вновь окно Solution Explorer и в нем сделайте проект gl3D стартовым. Для этого откройте контекстное меню над именем этого проекта и выберите в нем команду Set As StartUp Project. Шрифт имени проекта gl3D должен стать полужирным. Теперь по команде Start среда будет активировать именно проект gl3D.
В том же окне Solution Explorer командой Rename из контекстного меню измените имена файлов следующим образом Class1.cs -> GL.cs, Form1-> f3D, Program.cs -> pr3D.cs, соглашаясь с предложениями среды.
Рекомендация
Для сохранения проекта на внешнем носителе (флэш-карте и т.п.) необходимо, вообще говоря, сохранять весь каталог решения slOpenGL. Для этого рекомендуется в начале архивировать всю папку slOpenGL в один файл (.rar, .zip и т.п.), который затем переписать на внешний носитель, либо отослать по почте. При работе в общей аудитории это необходимо делать уже потому, что никто не гарантирует сохранность информации в Ваше отсутствие.
Подготовка формы проекта
Замените значение Form1 в заголовке формы на 3D. Для этого
-
Войдите в окно визуального отображения формы f3D.cs [Design]. Там расположено изображение окна проекта с заголовком Form1 по умолчанию.
-
Щелкните по окну формы мышкой.
-
Откройте окно Properties.
-
Найдите в левой колонке свойство Text.
-
В правой колонке наберите 3D.
Поместите на форму компоненту-контейнер ToolStripContainer. Для этого
-
Откройте окно ToolBox, где находятся все компоненты, доступные для визуального проектирования.
-
Найдите и откройте раздел Menus&Toolbars.
-
Выберите компоненту ToolStripContainer и перетащите ее на форму.
-
Нажмите команду Dock Fill in Form. По этой команде контейнер займет всю клиентскую область окна формы и будет постоянно так расположен вне зависимости от размеров формы.
Компонента ToolStripContainer объединяет 5 панелей - одну в центре и 4 по краям. Все панели по умолчанию присутствуют и видны. Центральная панель этой компоненты называется Content-панелью. На нее поместите новую компоненту Panel. Для этого
-
Войдите вновь в окно ToolBox
-
Откройте раздел Containers.
-
Найдите компоненту Panel и перетащите ее на центральную панель формы.
-
Щелкните по кнопке, имеющей форму стрелки, в правом верхнем углу контура панели.
-
Дайте команду Dock in Parent Container. Новая панель полностью заполнит Content-панель контейнера ToolStripContainer1.
-
Откройте окно Properties, найдите свойство Name новой панели и замените значение panel1, стоящее там по умолчанию, значением panelGL.
На панель panelGL будет выводиться изображение, формируемое командами OpenGL. Для этого ей будет сопоставлен "порт вывода изображения", или "контекст визуализации" (rendering context), необходимый для работы команд OpenGL. Панели, расположенные по краям компоненты ToolStripContainer, будут использоваться в дальнейшем для размещения элементов управления (меню, строки статуса, кнопок, редакционных окошек и т.д.).
В частности, добавьте на нижнюю панель строку статуса, для чего
-
Откройте окно ToolBox, где находятся все компоненты, доступные для визуального проектирования.
-
Найдите и откройте раздел Menus&Toolbars.
-
Выберите компоненту StatusStrip и перетащите ее на нижнюю панель.
-
В свойство Items образовавшегося объекта StatusStrip1 добавьте объект типа StatusLabel, который назовите stLabel. В него будет помещаться текстовая информация.
-
В окне Properties у вновь образованной компоненты stLabel (для выделения компоненты в верхней части окна Properties есть выпадающий список) сотрите длинное значение свойства Text, установленное средой по умолчанию.
Измените стартовое положение окна на экране дисплея. Для этого
-
Перейдите в окно дизайнера f3D.cs [Design].
-
Откройте окно Properties .
-
Из выпадающего списка в верхней части окна Properties установите объект формы f3D, свойства которого намерены изменить.
-
В списке свойств объекта f3D найдите StartPosition.
-
В правой колонке установите CenterScreen.
Теперь окно будет всегда открываться в центре экрана.
Описание класса формы f3D среда размещает в двух файлах f3D.cs и f3D.Designer.cs. То, что описание класса разнесено на несколько файлов, указывается модификатором partial, стоящим в заголовке описания. Файл f3D.cs содержит ту часть описания, которая управляется непосредственно пользователем. Файл f3D.Designer.cs содержит описание тех членов класса, которыми управляет дизайнер среды в процессе визуального конструирования. Этот последний файл не рекомендуется редактировать.
Конструктор класса f3D находится в пользовательском файле f3D.cs. Его тело состоит по умолчанию только из вызова метода InitializeComponent(), описанного в файле дизайнера f3D.Designer.cs. После вызова метода InitializeComponent() пользователь может помещать в тело конструктора формы любые операторы, которые необходимы на стадии конструирования объекта формы. В данном случае поместите в тело конструктора после строки InitializeComponent(); операторы, которые делают форму квадратной и максимально заполняющей экран вне зависимости от его размеров и формы:
// Операторы, делающие форму квадратной со стороной side,
// равной минимальной стороне дисплея.
// Класс Screen представляет дисплей или несколько дисплеев.
// Статическое свойство PrimaryScreen класса Screen возвращает главный дисплей
// Свойство Bounds возвращает прямоугольник границ дисплея
int side =
Math.Min(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
// Свойство Size определяет размеры окна
Size = new Size(side, side);
Само тело конструктора f3D() поместите в раздел (region) с именем Ctr (принятое сокращение от слова Constructor) так, чтобы весь код принял следующий вид
#region Ctr
public f3D()
{
InitializeComponent();
// Операторы, делающие форму квадратной со стороной side,
// равной минимальной стороне дисплея.
// Класс Screen представляет дисплей или несколько дисплеев.
// Статическое свойство PrimaryScreen класса Screen возвращает главный дисплей
// Свойство Bounds возвращает прямоугольник границ дисплея
int side =
Math.Min(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
// Свойство Size определяет размеры окна
Size = new Size(side, side);
}
#endregion
Проверьте результат проектирования, активировав приложение командой Start Debugging из меню Debug (кнопка с зеленой стрелочкой на панели быстрого доступа).
Достарыңызбен бөлісу: |