Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






OpenGL: рисование точек и отрезков






Работа с OpenGL в Borland Delphi

Лабораторная работа №1.

OpenGL: рисование точек и отрезков

Самым простым примитивом в OpenGL является точка. Точка в двумерной системе координат задается двумя параметрами: координатами по оси X и по оси Y.

В OpenGL начала отсчета расположена в центре области вывода (ему соответствуют координаты [0, 0]). Левый нижний угол области вывода имеет координаты [-1, -1], правый верхний – [1, 1] и т.д (рис. 1).

Рисунок 1. Координаты области вывода

 

Чтобы задать координаты точки, используется функция glVertex2f (в двумерном пространстве) и glVertex3f (в трехмерном пространстве). Пример glVertex2f(0, 0) – точка в центре области вывода.

Функции glVertex2f должны находится в программе между двумя функциями glBegin и glEnd. Аргумент функции glBegin определяет тип примитива, который следует изобразить, а функция glEnd не требует аргументов. При выводе на экран точек аргументом функции glBegin является символьная константа GL_POINTS.

Примечание: Помимо константы GL_POINTS в OpenGL имеется константа GL_POINT, использующаяся в других командах. Компилятор Delphi не сможет распознать ошибку, если вместо одной константы указать другую. Но в данном случае не будет построено ожидаемое изображение.

Пример:

glBegin(GL_POINTS);

glVertex2f(0, 0);

glEnd;

Чтобы задать размер точек используется команда glPointSize(size).

 

 

Пример: glPointSize(20).

Цвет точек определяется с помощью команды glColor3f(R, G, B), у которой три аргумента изменяются в пределах от 0 до 1 для каждой составляющей цвета (красный, зеленый и синий).

Пример: glColor3f(1, 0, 0) – красный цвет.

Задание 1: Откройте минимальную программу OpenGL. Дополните обработчик события OnPaint командами рисования точек. Необходимо нарисовать пять точек, четыре по углам и одну в центре.

Примечание: Обратите внимание на то, что вместе с изменением размеров окна рисуемое изображение также изменяется.

Чтобы получить точки в виде кружков, перед командными скобками вставьте строку

glEnable (GL_POINT_SMOOTH); //включаем режим сглаживания точек

Пара команд glEnadle и glDisable играют в OpenGl очень важную роль, включая и отключая режимы работы следующих за ними команд.

Задание 2: Измените программу из задания 1 так, чтобы выводились круглые точки а не квадратные.

Если необходимо выводить рисунок не на все окно, а лишь на его часть, используется команда glViewPort.

Команда glViewPort(x, y, width, height) задает область вывода. У этой команды четыре аргумента: координаты нижнего левого угла прямоугольника вывода, а также его ширина и высота.

Пример: glViewPort (0, 0, ClientWidth, ClientHeight) – область вывода все окно.

Задание 3: С помощью команды glViewPort сместите изображение точек к левому верхнему углу формы.

 

После выполнения задания, вы увидите, что хоть точки и выводится в левой верхней части экрана, окрашивается все окно. Иногда необходимо осуществлять вывод в пределах некоторой части окна. Для этого используется функция вырезки glScissor(x, y, width, height), которая определяет прямоугольник в окне приложения, т.е. область вырезания. После того как область вырезки задана, дальнейшие команды воспроизведения могут модифицировать только пикселы, лежащие внутри области.

Для этой функции необходимо включить режим учета вырезки:

glEnable (GL_SCISSOR_TEST);

Затем необходимо задать область вырезки:

glScissor(0, round(ClientHeight/2), round(ClientWidth/2), round(ClientHeight/2));

После вырезки этот режим необходимо отключить парной командой glDisable.

Задание 4: Измените задание 3 таким образом, чтобы изображение ограничивалось четвертью экрана.

Задание 5 (дополнительно): Нарисовать сотню точек со случайными координатами и цветами.

Кроме точек в OpenGL есть еще примитив отрезок. Отрезок задается с помощью двух вершин (команда glVertex2f). Вершины отрезков задаются также между двумя функциями (glBegin и glEnd). При этом аргумент функции glBegin необходимо задать GL_LINES.

Если в качестве аргумента функции glBegin используется константа GL_LINES то между glBegin и glEnd необходимо задавать четное количество вершин. Вершины попарно задают координаты начала и конца каждого отрезка прямой.

Задание 6: Нарисуйте прямоугольник из четырех отрезков.

Для увеличения толщины отрезков перед командными скобками укажите ширину линии glLineWidth(width).

Пример: glLineWidth(3)

Как и у точек, у линий можно устранить ступенчатость, включив следующий режим: glEnable(GL_LINE_SMOOTH).

Задание 7: Измените толщину линии и устраните ступенчатость в шестом задании.

Следующая константа, которая может служить аргументом функции glBegin – GL_LINE_STRIP. Эта константа определяет примитив, когда перечисляемые вершины последовательно соединяются одна за другой.

Задание 8: Составьте программу так, чтоб на экран выводилась буква «П».

Константа – GL_LINE_LOOP, также последовательно соединяет перечисляемые вершины, однако последняя вершина замыкается с самой первой.

Задание 9: Измените в предыдущем задании константу GL_LINE_STRIP на GL_LINE_LOOP.

С помощью команды glLineStipple(repeatFactor, pattern) можно задавать стиль линии. параметр pattern (шестнадцатеричное число) указывает, как должна отображаться линия, т.е. определяет шаблон линии:

$0101 – точечный;

$00FF – штрихи;

$1C47 – штрих-пунктир.

Целочисленный параметр repeatFactor сообщает, сколько раз должен повторится каждый разряд в шаблоне перед применением следующего разряда.

Пример: glLineStipple(1, $00FF)

Перед тем как использовать данную функцию, необходимо включить режим GL_LINE_STIPPLE.

Задание 10: Нарисуйте несколько параллельных отрезков, задавая для них различные аргументы функции glLineStipple.

Можно задать отрезок с градацией цветовых оттенков. Для этого необходимо перед установкой первой вершины задать один цвет (с помощью команды glColor3f), а перед второй вершиной – другой цвет.

Функция glShadeModel задает правило тонирования. Если ее аргумент равен GL_SMOOTH – то линия будет закрашена градиентом, если GL_FLAT – то линия будет закрашена цветом второго конца отрезка. Аргумент GL_SMOOTH задается по умолчанию, поэтому для рисования отрезка с градацией цвета получится даже если не вызывать команду glShadeModel.

Задание 11: Нарисовать линию с непрерывной градацией цвета.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.