Опубликован: 02.12.2011 | Доступ: свободный | Студентов: 1001 / 131 | Оценка: 5.00 / 4.00 | Длительность: 09:26:00
Специальности: Программист
Теги: .net, open source, opengl
Лекция 5:

Основные графические примитивы OpenGL и их свойства

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Аннотация: В лекции рассматриваются основные примитивы OpenGL и их свойства.

Цель лекции: Научиться использовать основные примитивы OpenGL для формирования изображения.

Примеры на C# (WinForms) и Object Pascal (Delphi)

Пример № 4.1 Пример демонстрирует формирование несвязанных отрезков.

Пример № 4.2 Пример демонстрирует формирование замкнутой ломаной.

Пример № 4.3 Пример демонстрирует формирование несвязанных треугольников.

Пример № 4.4 Пример демонстрирует формирование треугольников с общими гранями.

Пример № 4.5 Пример демонстрирует формирование треугольников с общей вершиной.

Пример № 4.6 Пример демонстрирует формирование несвязанных четырехугольников.

Пример № 4.7 Пример демонстрирует формирование четырехугольников с общими гранями.

Пример № 4.8 Пример демонстрирует формирование многоугольника.

Пример № 4.9 Пример демонстрирует построение графика функции y = z*Sin(x*n) с возможностью изменения коэффициентов n и z с помощью клавиатуры.

В OpenGL все изображения формируются из графических примитивов, основными из которых являются точки, отрезки, треугольники, четырехугольники, многоугольники. Базовым графическим примитивом для построения сложных объёмных изображений является треугольник. Такие примитивы как четырехугольники и многоугольники хотя и создаются с помощью отдельных команд, но формируются библиотекой OpenGL из набора треугольников. Необходимая детализация сложных изображений достигается за счет уменьшения размера примитивов, из которых строится изображение, и увеличения их количества.

Формирование примитива начинается с вызова команды Begin и передачи ей в качестве значения параметра mode целочисленной константы, которая определяет формируемый примитив:

Begin (mode: GLenum);

В Object Pascal для реализации команды Begin используется процедура

procedure glBegin (mode: GLenum);

Например, для формирования точек используется константа GL_POINTS, для формирования отрезков –константа GL_LINES.

В библиотеке OpenTK для реализации команды Begin используется статический метод класса GL (C#):

void Begin(BeginMode mode);

Формируемый примитив определяется с помощью элемента перечисления BeginMode. Для формирования точек используется значение этого перечисления Points, для формирования отрезков – значение Lines.

Формирование примитивов завершается с помощью команды End.

В Object Pascal эта команда реализуется с помощью процедуры:

procedure glEnd;

В библиотеке OpenTK для реализации команды End используется статический метод класса GL (C#):

void End();

Все примитивы состоят из набора вершин. Для задания расположения вершин в пространстве используются нормализованные координаты.

Координаты каждой вершины определяются с помощью команды OpenGL:

Vertex[2 3 4][s i f d]

Вызов этой команды должен выполняться межу вызовами команд Begin и End, иначе команда Vertex будет проигнорирована библиотекой.

Команда может иметь от 2 до 4 параметров. Если команда имеет три параметра, то ей передаются декартовые координаты вершин. В варианте команды с двумя параметрами они соответствуют декартовым координатам по оси OX и OY, координата по оси OZ принимается равной нулю.

В Object Pascal команда Vertex реализована набором процедур, объявление двух из них приведено ниже:

procedure glVertex2d (x,y: GLdouble);
procedure glVertex3d (x,y, z: GLdouble);

В библиотеке OpenTK команда реализуется с помощью статических методов класса GL с различным числом параметров и типами данных. Объявление двух из них приведено ниже.

void Vertex2(double x, double y);
void Vertex3(double x, double y, double z);

Необходимо обратить внимание на то, что для каждого вызова команды Begin должен быть соответствующий вызов команды End. Их можно сравнить с парой операторов begin и end языка Pascal, которые так же являются парными. Но в отличие от них для команд Begin и End компилятор не проверяет их парность, и эта задача ложится полностью на программиста. При несоблюдении парности вызовов команд Begin и End часто возникают довольно сложно выявляемые ошибки в формировании изображения.

Точки

Для формирования точек в качестве значения параметра mode команды Begin необходимо указать значение:

  • константу GL_POINTS в программе на Object Pascal;
  • значение Points перечисления BeginMode в программе на C#.

Перед формированием точек могут быть указаны их размер и определён режим сглаживания, который будет использоваться при их отображении. Эти параметры должны быть установлены перед вызовом команды Begin.

Размер точки

Размер точки может быть установлен с помощью команды PointSize. В Object Pascal команда реализуется с помощью процедуры:

procedure glPointSize (size: GLfloat);

В библиотеке OpenTK для этого используется статический метод класса GL (C#):

void PointSize(float size);

По умолчанию размер точки равен одному пикселу. Необходимо обратить внимание на то, что хотя координаты точки задаются в масштабе сцены, но размер точки задается в координатах устройства вывода изображения. Связано это с тем, что точки формируются на одном из последних этапов формирования изображения – на этапе растеризации.

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?