Лабораторная работа N 6

advertisement
Лабораторная работа N 7.
Визуализация средствами графической библиотеки
OpenGL
Введение
Цель задания - получить практический опыт использования библиотеки OpenGL на
платформе MS Visual Studio .NET и реализация кода на языке C#.
Описание задания
Примерный алгоритм решения задачи такой:
1. В среде MS Visual Studio .NET выбрать шаблон создания оконного приложения Windows Forms.
2. Подключить к проекту библиотеки Tao.OpenGL.dll, Tao.FreeGlut.dll,
Tao.Platform.Windows.dll
3. Добавить в папку проекта \Debug библиотеку freeglut.dll
4. Добавить ссылку на библиотеки.
5. Подключить эти библиотеки в пространство имен.
6. Разместить на форме элемент: SimpleOpenGLControl (область вывода графики)
7. Инициализировать работу элемента simpleOpenGlControl1
8. Добавить код, реализующий визуализацию полигональной модели, средствами
библиотеки GLUT.
9. Добавить код, отображающий сцену в окне приложения.
10. Реализовать систему освещения
Примеры выполнения работы
Для работы с графикой необходимо подключить фреймворк taoframework
http://sourceforge.net/projects/taoframework/
Элементами управления можно вращать куб в 3 измерениях.
Рис. 1. Отображение Осей X Y Z
Рис. 2. Поворот вокруг оси Y
Рис. 3. Поворот вокруг оси X
Рис. 4. Поворот вокруг оси Y и Z
Варианты задания
Задание
1. Размещение простейших
примитивов на сцене
2. Создание сложных объектов:
полигональная сетка
3. Текстуирование, UV-маппинг
4. Анимация
Вариант
1 2 3
1 2 3
4
1
5
2
6
3
7
1
8
2
9
3
10
1
11 12
2 3
1
1
1
2
2
2
3
3
3
1
1
1
1
2
1
2
1
1
1
1
1
2
1
2
2
1
2
1
2
2
2
2
2
1
2
1
1. Размещение простейших примитивов на сцене
1.1. Сцена 1
1.2. Сцена 2
1.3. Сцена 3
2. Создание сложных объектов: полигональная сетка
2.1. Фигура 1
2.2. Фигура 2
2.3. Фигура 3
3. Использование текстур. Проецирование текстуры на поверхность (UVW-mapping).
3.1. Создать полигональный куб и наложить на его грани текстуру игральной кости.
3.2. Создать полигональную модель пирамиды и наложить на нее текстуру кирпич.
4. Анимация
4.1. Создать сцену из неподвижного стола и катающегося по нему шарика. Шарик
должен иметь текстуру. Шарик должен кататься по кругу.
4.2. Создать сцену из неподвижного стола и перемещающегося по нему куба. Куб
должен иметь текстуру. Куб должен перемещаться по квадратному пути.
Методические указания
Использование библиотеки OpenGl на платформе .NET
Продемонстрируем создание трехмерного графического приложения c использованием
технологии OpenGL на платформе .NET.
Дистрибутив библиотеки Tao Framework можно получить с сайта разработчиков [1].
После инсталяции в папке c:\Program Files будет создана папка \TaoFramework, в которой
можно найти сами библиотеки, дкументацию, примеры и исходные коды (рис. 1).
1. The Tao Framework | Download The Tao Framework software for free at SourceForge.net. –
URL: http://sourceforge.net/projects/taoframework/
Рис. 1. Вид папки TaoFramework после инсталяции
В Microsoft Visual C# создадим новый проект, в качестве шаблона выбрав приложение
Windows Forms. Назовем его WindowsFormsApplication_OpenGL1.
Рис. 2. Окно создания проекта
Сразу после генерации кода шаблона, дайте команду Файл – Сохранить все. В диалоговом
окне укажите папку сохранения проекта.
Рис. 3. Диалоговое окно сохранения проекта
Для реализации этого проекта будут использованы три библиотеки Tao Framework из
папки c:\Program Files\TaoFramework \bin
1. Tao.OpenGL.dll - отвечает за реализация библиотеки OpenGL
2. Tao.FreeGlut.dll - отвечает за реализацию функций библиоеки Glut. Мы будем ее
использовать для инициализации рендера , а так же для различных других целей.
3. Tao.Platform.Windows.dll - отвечает за поддержку элементов непосредственно для
визуализации непосредственно на платформе Windows.
Кроме этого, понадобится библиотека freeglut.dll из папки c:\Program
Files\TaoFramework\lib
Эти библиотеки необходимо добавить в папку проекта \Debug (рис. 4).
Рис. 4. Папка Debug проекта WindowsFormsApplication_OpenGL1
Теперь необходимо перейти к окну Solution Explorer (Обозреватель решений). Здесь, нас
интересует узел Links, который отображает связи с библиотеками, необходимыми для
работы разрабатываемого приложения (рис.5). Щелкните по этому узлу правой клавишей
мыши, после чего, в открывшемся контекстном меню выберите «Добавить ссылку» (“Add
Link”).
Рис. 5. Окно "Обозреватель решений"
В открывшемся окне «Добавить ссылку», открыть закладку "Обзор", перейти в
директорию \Debug, в которую были скопированы библиотеки Tao Framework и отметиь
эти библиотеки.
Рис. 6. Окно ссылок
После этого, необходимо открыть панель кода (клавиша F7) и подключить эти библиотеки
в пространство имен.
Рис. 7. Пространство имен
Следующий шаг – размещение на форме элементов: SimpleOpenGLControl (область
вывода графики) и кнопок управления button1 и button2. Элементы перетаскиваются из
"Панели элементов" на форму (рис. 8).
Рис. 8. Размещение элементов на форме
Если элемент SimpleOpenGlControl отсутствует на панели элементов необходимо
щелкнуть правой кнопкой на вкладке «Общие», и в раскрывшемся контекстном меню
выбрать пункт «Выбрать элементы» (Select elements) (рис. 9). В открывшемся диалоговом
окне "Выбор элементов панели элементов" отметить компонент SimpleOpenGLControl.
Рис. 9. Активизация элемента SimpleOpenGlControl
После этого данный элемент станет доступным для размещения на форме приложения.
Инициализация OpenGL в C# .NET .
Следующий шаг – инициализция работы OpenGl. Для этого в конструкторе класса
необходимо инициализировать работу элемента simpleOpenGlControl1:
namespace WindowsFormsApplication_OpenGL1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
simpleOpenGlControl1.InitializeContexts();
}
}
}
Затем, в режиме конструктора, необходимо создать шаблоны функций обработчиков
событий – загрузка (Load) формы и щелчек (Click) по кнопкам button1 и button2. Для
создания шаблонов достаточно сделайть двойной щелчок левой клавишей мыши на форме
и кнопках. В результате на странице кода появятся соответсвующие шаблоны.
namespace WindowsFormsApplication_OpenGL1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
simpleOpenGlControl1.InitializeContexts();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
}
}
}
Обработчик события Form1_Load содержит команды инициализации.
private void Form1_Load(object sender, EventArgs e)
{
// инициализация Glut
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE |
Glut.GLUT_DEPTH);
// очитка окна
Gl.glClearColor(0.76f, 0.84f, 0.98f, 1);
// установка порта вывода в соотвествии с размерами элемента
simpleOpenGlControl
Gl.glViewport(0, 0, simpleOpenGlControl1.Width,
simpleOpenGlControl1.Height); // Область вывода
// настройка проекции
Gl.glMatrixMode(Gl.GL_PROJECTION); // Матрица проекций
Gl.glLoadIdentity(); // Замена текущей матрицы на единичную
// Тип текущей проекции (проекция 3d на 2-ух мерный экран
Glu.gluPerspective(45, (float)simpleOpenGlControl1.Width /
(float)simpleOpenGlControl1.Height, 0.1, 200);
// Устанавливаем определенную проекцию в качестве текущей матрицы
и очищаем ее
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
// настройка параметров OpenGL для визуализации
Gl.glEnable(Gl.GL_DEPTH_TEST); // Тест глубины
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);
Gl.glEnable(Gl.GL_COLOR_MATERIAL); // Отображение цветов
материалов
}
Обработчик события button1_Click() содержит код, реализующий визуализацию
сеточного каркаса куба, средствами библиотеки GLUT.
private void button1_Click(object sender, EventArgs e)
{
// Очистка буфера цвета и буфера глубины
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
//
//
Gl.glLoadIdentity();
Gl.glColor3i(100, 0, 0);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(45, (float)simpleOpenGlControl1.Width /
(float)simpleOpenGlControl1.Height, 0.1, 200);
Glu.gluLookAt(8, 8, 10, 0, 0, 2, 0, 0, 1);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glPushMatrix(); // Перемещение текущей матрицы в стек матриц
//Glut.glutSolidCube(4.0);
Glut.glutWireCube(4.0);
Gl.glPopMatrix();
Gl.glFlush();
simpleOpenGlControl1.Invalidate(); // Обновить отображаемый кадр
(перерисовка)
}
Обработчик события button2_Click() содержит команду выхода из приложения.
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
Рис. 10. Результат выполнения программы
Таким образом, на этом простом примере продемонстрировано использование библиотеки
OpenGL для создания простейшей 3D сцены. Для доступа к OpenGL на платформе C#
.NET был использован набор библиотек Tao Framework.
Ссылки и литература
1. Меженин А.В. Методы и средства распознавания образов и визуализации
[Электронный ресурс]: Учебное пособие. – СПб.: НИУ ИТМО, 2012. –120 с. –
Доступ из системы дистанционного обучения НИУ ИТМО.
Download