Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СКТ - 5,6сем.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
8.67 Mб
Скачать

Вершины и система координат

Вершина – это точка в трехмерном пространстве. Для ее определения в библиотеке реализована специальная команда:

glVertex [2 3 4] [s i f d];

glVertex2 – определяет x и y, z=0, w=1

glVertex3 – определяет x, y, z, w=1

glVertex4 – определяет x, y, z, w.

Примитив или группа однотипных примитивов, к которым относятся точки, линии, ломанные, треугольники и т.д. определяются внутри командных скобок glBegin / glEnd.

glBegin (mode);

...

glEnd;

Параметр mode определяет примитивы, которые создаются из вершин, заданных между этими командами.

Точки

glBegin (GL_POINTS); // открываем командную скобку

glVertex2f (-1, -1); // вывод вершины

glVertex2f (-0.5, 1);

glVertex2f (0, 0);

glVertex2f (1, -1);

glVertex2f (1, 1);

glEnd; //закрываем командную скобку

– вывод отдельных точек

––––––––––––––––––––

glPointSize (20); // размер точек, устанавливается до командных скобок!

// По умолчанию 1.0

glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов

Цветовая гамма RGB, значения от 0.0 до 1.0. Если задан четвертый параметр () – он определяет степень прозрачности.

glEnable(GL_POINT_SMOOTH); точки будут в виде кругов, а не квадратов (по умолчанию), устанавливается режим до командных скобок!

Например, вывод 100 разноцветных точек:

glBegin (GL_POINTS);

For i := 1 to 100 do begin

glColor3f (random, random, random); если нет заданного значения, ex: random(20), то диапазон от 0 до 1.

glVertex2f (random * 2 - 1, random * 2 - 1);

end;

glEnd;

Линии

glBegin(GL_LINES); выводит отрезки, задаваемые парами начало-конец.

glLineWidth(2.5); задание ширины, за командными скобками! По умолчанию 1.0.

Устранить ступенчатость можно функцией

glEnable(GL_LINE_SMOOTH);

Константа GL_LINE_STRIP (glBegin) определяет ломанную, вершины которой соединяются одна за другой. GL_LINE_LOOP – замкнутая ломанная. Для рисования пунктирной ломанной перед командными скобками следует задать:

glLineStipple(1,$F0F0); Задает масштабный множитель (счетчик повторов бит) и шаблон штриховки – 16-разрядный шаблон, биты которого определяют рисуемые фрагменты.

glEnable(GL_LINE_STIPLE);

Треугольники

glBegin(GL_TRIANGLES); задаются тройки вершин.

glBegin(GL_TRIANGLE_STRIP); связанные треугольники: 1-2-3, 2-3-4, 3-4-5 и т.д. по номерам вершин.

Если перед рисование вершины в цикле поставить установку случайного цвета, и добавить процедуру обработки события OnKeyPress содержащую только Refresh, то по нажатию любой клавиши картинка будет обновляться, а переходы цвета будут плавными.

Многоугольники

Прямоугольник задается функцией glRectf(-0.5, -0.5, 0.5, 0.5);

Произвольные многоугольники с вершинами по четыре:

glBegin(GL_QUADS);

Многоугольник из связанных треугольников с общей вершиной, в качестве которой берется первая, строится: glBegin(GL_POLYGON); - выпуклый многоугольник.

Обработка курсора мышки

В секции private следует определить две переменных, задающих позицию курсора:

xpos : GLfloat; ypos : GLfloat;

Вывод точек можно осуществлять на основе этих переменных. Кроме того, необходим обработчик события OnMouseMove. Например:

procedure TfrmGL.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer); Х и Y текущие координаты курсора.

begin

xpos := 2 * X / ClientWidth - 1;

ypos := 2 * (ClientHeight - Y) / ClientHeight - 1;

Refresh; // перерисовка окна при каждом движении курсора

end;

Тогда точки будут рисоваться в позиции курсора мышки.

Обработка нажатия клавиш

Необходим обработчик события KeyDown , например:

procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

Begin

If Key = VK_ESCAPE then Close //выход по Esc

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]