Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
OpenGL: рисование точек и отрезковСтр 1 из 4Следующая ⇒
Работа с 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: Нарисовать линию с непрерывной градацией цвета.
|