![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Запустив 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.
Дата публикования: 2015-04-07; Прочитано: 225 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!