- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Параметры вида. Перспективная проекция
Объем сцены ограничен кубом с координатами точек вершин по диагоналям (-1. –1, -1) и (1, 1, 1).
Команда glFrustum задает параметры вида, определяющие область воспроизведения в пространстве. Все, что выходит за пределы этой области, будет отсекаться при воспроизведении. Первые два аргумента задают координаты плоскостей отсечения слева и справа, третий и четвертый параметры определяют координаты плоскостей отсечения снизу и сверху. Последние аргументы задают расстояния до ближней и дальней плоскостей отсечения, значения этих двух параметров должны быть положительными – это не координаты плоскостей, а расстояния от глаза наблюдателя до плоскостей отсечения. Например:
glFrustum (-1, 1, -1, 1, 3, 10);
glTranslatef(0.0, 0.0, -5.0); // перенос объекта по оси Z
Все, что рисуется с нулевым значением координаты Z, не будет видно наблюдателю, поскольку ближнюю плоскость отсечения расположили на расстоянии 3 единиц от глаза наблюдателя, располагающегося в точке (0, 0, 0). Поэтому перед воспроизведением смещаем систему координат на пять единиц вниз.
Команды glPushMatrix; и glPopMatrix можно заменить вызовом команды glLoadIdentity, «вернуться в исходное состояние».
Задать параллельную проекцию можно командой:
glOrtho (-2, 2, -2, 2, 0, 15.0); параметры аналогичны glFrustum.
Можно рассмотреть команду gluOrtho2D.
Можно использовать команду построения перспективы
gluPerspective(angX, // угол видимости в направлении оси Y
angY, // угол видимости в направлении оси X
1.0, // расстояние от наблюдателя до ближней плоскости отсечения
15.0); // расстояние от наблюдателя до дальней плоскости отсечения
При построении желательно задавать вектор нормали, используемый для расчета цветовых параметров каждого пикселя:
glNormal3f(0.0, 0.0, 1.0);
Буфер глубины
Используется для передачи пространства. При воспроизведении каждого пикселя в этот буфер записывается информация о значении координаты Z пикселя, так называемая оконная Z.
После получения контекста воспроизведения сообщаем системе OpenGL о том, что необходимо корректировать построения в соответствии с глубиной:
glEnable (GL_DEPTH_TEST);
Код сцены начинается с очистки двух буферов: буфера кадра и буфера глубины:
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Надстройки над OpenGl
Стандартной надстройкой является библиотека glu, физически располагаемая в файле glu32.dll. Кроме того, существует библиотека glut. Для ее подключения необходимо добавить строку:
uses DGLUT; //Для рисования куба с единичной длиной ребра используем:
glutSolidCube (1.0); и т.д.
glutSolidSphere (1.5, 20, 20);
glutSolidCone (0.5, 1.5, 20, 20);
glutSolidTorus (0.5, 1.5, 20, 20);
glutSolidDodecahedron;
glutSolidIcosahedron;
glutSolidTetrahedron;
glutSolidTeapot (1.5);
Источник света
При создании окна включается источник света:
glEnable (GL_LIGHTING); // разрешаем работу с освещенностью
glEnable (GL_LIGHT0); // включаем источник света
Это источник с именем 0. Можно еще добавить источник, например:
glEnable (GL_LIGHT1);
