Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Порядок проведения работы. Запустив Micrisoft Visual Studio, нужно создать новый проект на языке C# так же, как и в предыдущей лабораторной работе



Запустив 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...