
- •Печатается по решению методического совета факультета автоматики и информационных технологий Введение
- •1Лабораторные работы
- •1.1. Общие требования к выполнению лабораторных работ
- •1.2. Лабораторная работа № 1
- •1.3.Пример отчета к лабораторной работе № 1
- •1.4. Лабораторная работа № 2
- •1.5.Оформление отчета по лабораторной работе № 2
- •1.6.Лабораторная работа № 3
- •1.7.Оформление отчета по лабораторной работе № 3
- •1.8. Лабораторная работа № 4
- •1.9.Оформление отчета по лабораторной работе № 4
- •1.10. Лабораторная работа № 5
- •1.11.Оформление отчета по лабораторной работе № 5
- •1.12. Лабораторная работа № 6
- •1.13.Оформление отчета по лабораторной работе № 5
- •1.14. Лабораторная работа № 7
- •1.15.Оформление отчета по лабораторной работе № 7
- •1.16. Лабораторная работа № 8
- •1.17.Оформление отчета по лабораторной работе № 8
- •2Курсовое проектирование
- •2.1. Общие требования к выполнению курсовой работы
- •2.2. Техническое задание для курсовой работы
- •2.3.Пояснительная записка
- •2.4.Порядок защиты курсовой работы
- •Библиографический список
- •Приложение 1. Образец титульного листа к лабораторным работам
- •Отчет по лабораторной работе № ___ «Название лабораторной работы»
- •Приложение 2. Образец титульного листа к курсовой работе
- •Курсовая работа
- •Векторный графический редактор
- •Графические системы компьютеров
- •443100, Г. Самара, ул. Молодогвардейская, 244. Главный корпус
1.13.Оформление отчета по лабораторной работе № 5
Титульный лист отчета оформить в соответствии с Приложением 1. В начале отчета необходимо указать цель лабораторной работы и задание.
Результаты визуализации объекта с помощью библиотеки Tao Framework представить в виде скриншота.
1.14. Лабораторная работа № 7
Тема: «Двумерная графика в OpenGL»
Цель работы – визуализация примитивов и других двумерных объектов средствами OpenGL.
Программное обеспечение. Для выполнения лабораторной работы на компьютере должен быть установлен пакет программ Microsoft Visual Studio, библиотека Tao Framework.
Задание
В данной лабораторной работе требуется разработать программу, использующую библиотеку Tao Framework в среде .NET для задания и визуализации двумерных примитивов средствами OpenGL. При подготовке к лабораторной работе и разработке программы следует руководствоваться материалами, изложенными в разд. 1.6 методических указаний [3], а также в [7].
Порядок проведения работы
Запустив Micrisoft Visual Studio, нужно создать новый проект на языке C# так же, как и в предыдущей лабораторной работе. Также необходимо инициализировать Tao Framework, расширить пространство имен, расположить основные элементы на форме. Далее также следует назначить необходимые обработчики событий и инициализировать необходимые элементы.
Перейдя к свойствам формы, измените название окна на «Визуализация 2D примитивов».
Рассмотрим код функции 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(1, 1, 1, 1); // белый цвет // установка порта вывода в соответствии с размерами элемента anT Gl.glViewport(0, 0, AnT.Width, AnT.Height); // настройка проекции Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); // настройка 2D ортогональной проекции // в зависимости от того, какая сторона больше if ((float)AnT.Width <= (float)AnT.Height)
{
Glu.gluOrtho2D(0.0, 30.0 * (float)AnT.Height / (float)AnT.Width, 0.0, 30.0);
}
else
{
Glu.gluOrtho2D(0.0, 30.0 * (float)AnT.Width / (float)AnT.Height, 0.0, 30.0);
}
Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity();
}
Как видно из кода, за настройку 2D ортогональной проекции отвечает функция gluOrtho2D, реализация которой предоставлена библиотекой Glu. Эта функция как бы помещает начало координат в самый левый нижний квадрат, а камера (наблюдатель) в таком случае находится на оси Z, и таким образом визуализируется графика в 2D режиме.
По сути, нужно передать в качестве параметров координаты области видимости окном проекции: left , right, bottom и top. Чтобы исключить искажения, связанные с тем, что область вывода не квадратная, параметр top рассчитывается как произведение 30 и отношения высоты элемента AnT (в котором будет идти визуализация) к его ширине. В том же случае, если высота больше ширины, то наоборот: отношением ширины к высоте.
Теперь нужно написать код функции button1_Click. В ней будет производиться очистка буфера цвета кадра и очистка текущей объектно-видовая матрица. Затем в этой же функции в режиме рисования линий нужно задать координаты вершин контуров для буквы «А». В конце должна следовать перерисовка содержимого элемента AnT.
Но перед тем как нарисовать букву «А», для тренировки просто проведите линию из начала координат в противоположенный угол окна. Тогда код функции будет выглядеть следующим образом:
private void button1_Click(object sender, EventArgs e)
{
// очищаем буфер цвета Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
// очищаем текущую матрицу Gl.glLoadIdentity(); // устанавливаем текущий цвет - красный (от 0 до 1)
Gl.glColor3f(1, 0, 0); // активируем режим ломаной линий для рисования диагонали Gl.glBegin(Gl.GL_LINE_STRIP);
// первая вершина будет находиться в начале координат Gl.glVertex2d(0, 0); // рисуем вторую вершину в противоположенном углу // в зависимости от того, как была определена проекция if ((float)AnT.Width <= (float)AnT.Height)
{
Gl.glVertex2d(30.0f * (float)AnT.Height / (float)AnT.Width, 30);
}
else
{
Gl.glVertex2d(30.0f * (float)AnT.Width / (float)AnT.Height, 30);
}
// завершаем режим рисования Gl.glEnd(); // дожидаемся конца визуализации кадра Gl.glFlush(); AnT.Invalidate(); // перерисовка элемента AnT.
}
На рис. 1.25 показан примерный вид окна приложения после его компиляции и запуска приложения.
Рис. 1.25
Далее программу необходимо переработать для визуализации изображения, в виде буквы «А». Изображение буквы состоит из двух замкнутых ломаных линий (рис. 1.26).
На рис. 1.26 отмечены начальные точки обоих линий и значения координат всех вершин.
Рис.
1.26
Теперь код, написанный для рисования диагональной линии, надо заменить на новый, приведенный ниже:
// активируем режим рисования первой линии Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glVertex2d(8, 7); Gl.glVertex2d(15, 27); Gl.glVertex2d(17, 27); Gl.glVertex2d(23, 7); Gl.glVertex2d(21, 7); Gl.glVertex2d(19, 14); Gl.glVertex2d(12.5, 14); Gl.glVertex2d(10, 7); Gl.glEnd(); // завершаем режим рисования
// вторая линия Gl.glBegin(Gl.GL_LINE_LOOP); Gl.glVertex2d(18.5, 16); Gl.glVertex2d(16, 25); Gl.glVertex2d(13.2, 16); Gl.glEnd(); // завершаем режим рисования
После компиляции проекта и запуска приложения при нажатии на кнопку «Визуализировать» результат его работы должен выглядеть как показано на рис. 1.27.
Рис. 1.27.