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

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

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >

Режим сглаживания точки

Управление режимом сглаживания точки осуществляется с помощью команд Enable и Disable. Команда Enable включает режим сглаживания точек, команда Disable отключает его. По умолчанию режим сглаживания точек отключен.

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

procedure glEnable(cap: GLenum);
procedure glDisable(cap: GLenum);

Для управления режимом сглаживания точек в качестве значения параметра должна быть указана константа GL_POINT_SMOOTH.

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

void Enable(EnableCap cap);
void Disable(EnableCap cap);

Для управления режимом сглаживания необходимо указать значение PointSmooth перечисления EnableCap.

При отключенном режиме сглаживания точка рисуется в виде квадрата. При включенном режиме сглаживания библиотека пытается изобразить точку в виде круга. На рис. 4.1 приведены изображения точки разных размеров с выключенным (изображения слева) и включенным (изображения справа) режимом сглаживания.

Изображения точки разного размера с использованием режима сглаживания и без него

Рис. 4.1. Изображения точки разного размера с использованием режима сглаживания и без него

Отрезки

Библиотека реализует три примитива для формирования отрезков.

Несвязанные отрезки

Для формирования несвязанных отрезков значение параметра команды Begin должно быть равно значению Lines перечисления BeginMode при использовании библиотеки OpenTK (C#) и константе GL_LINES в программе на Object Pascal.

Каждая пара вершин определяет отрезок. Если задано нечетное количество вершин, то последняя вершина игнорируется и не будет использоваться для построения отрезков. Если будет задана всего одна вершина, то библиотека не сможет построить ни одного отрезка, так как для создания отрезка требуется как минимум 2 вершины. В "Структура приложений, использующих OpenGL" был приведен пример формирования несвязанных отрезков. В пример 4.1 и пример 4.2 формируется три несвязанных отрезка, хотя вершин задано 7. Последняя вершина игнорируется ( рис. 4.2).

GL.Begin(BeginMode.Lines);
  GL.Vertex3(-0.5, -0.5, 0);
  GL.Vertex3(-0.5, 0.5, 0);
  GL.Vertex3(0, -0.5, 0);
  GL.Vertex3(0, 0.5, 0);
  GL.Vertex3(0.5, -0.5, 0);
  GL.Vertex3(0.5, 0.5, 0);
  GL.Vertex3(0.7, -0.5, 0);
GL.End()
Листинг 4.1. Пример формирования несвязанных отрезков на C#
glBegin(GL_LINES);
  glVertex3f(-0.5, -0.5, 0);
  glVertex3f(-0.5, 0.5,  0);
  glVertex3f(0, -0.5, 0);
  glVertex3f(0, 0.5,  0);
  glVertex3f(0.5, -0.5, 0);
  glVertex3f(0.5, 0.5,  0);
  glVertex3f(0.7, -0.5, 0);
glEnd
Листинг 4.2. Пример формирования несвязанных отрезков на Object Pascal
Схема формирования несвязанных отрезков

Рис. 4.2. Схема формирования несвязанных отрезков

Ломаные линии

Для формирования ломаных линий значение параметра команды Begin должно быть равно значению LineStrip перечисления BeginMode при использовании библиотеки OpenTK (C#) и константе GL_LINE_STRIP в программе на языке Object Pascal.

При формировании этого примитива каждая вершина, начиная с третьей (первые две вершины используются для построения первого отрезка), будет соединяться отрезком с предыдущей вершиной. Т. е. каждая вершина, начиная со второй, используется для создания очередного отрезка.

Если в листинге 4.1 заменить параметр процедуры glBegin на GL_LINE_STRIP, а в листинге 4.2 заменить параметр метода GL.Begin на BeginMode.LineStrip, то будут сформированы 6 отрезков: один отрезок по первым двум вершинам и пять отрезков по другим пяти вершинам ( рис. 4.3).

Схема формирования ломаной линии

Рис. 4.3. Схема формирования ломаной линии
Схема формирования замкнутой ломаной

Рис. 4.4. Схема формирования замкнутой ломаной

Замкнутая ломаная

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

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

Примитив формируется аналогично ломаной линии с одним дополнением: отрезком так же соединяются первая и последняя вершина. Таким образом, в результате получается замкнутая ломаная.

Если в листинге 4.1 программы на C# заменить параметр метода GL.Begin на значение LineLoop перечисления BeginMode, то будут сформированы 7 отрезков ( рис. 4.4). По сравнению с рис. 4.3 появляется еще один отрезок, который соединяет первую и последнюю вершину.

Чтобы получить аналогичный результат в программе на Object Pascal, фрагмент которой приведен в листинге 4.2, необходимо заменить параметр процедуры glBegin на константу GL_LINE_LOOP.

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

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

Спасибо!

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

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

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

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