OpenGLОб этой книге
Что нового в этом издании
Что необходимо знать перед прочтением
Как получить примеры программ
Обучающие программы по OpenGL от Нэйта Робинса
Используемые стили
От издателя перевода
Благодарности
Глава 1. Введение в OpenGL
Что такое OpenGL
Немного программного кода
Синтаксис команд OpenGL
OpenGL как конечный автомат
Конвейер рисования OpenGL
Списки отображения
Вычислители
Операции над вершинами
Компоновка примитивов
Операции над пикселами
Компоновка текстур
Растеризация
Операции над фрагментами
Библиотеки, связанные с OpenGL
Включаемые файлы
GLUT, набор инструментов OpenGL
Анимация
Обновление с задержкой
Движение = Перерисовка + Обмен
Глава 2. Управление состоянием
и рисование геометрических объектов
Основы рисования
Очистка окна
Установка цвета
Ускорение завершения рисования
Управление системой координат
Описание точек, линий и многоугольников
Что такое точки, линии и многоугольники?
Задание вершин
Рисование графических примитивов в OpenGL
Управление основными состояниями
Отображение точек, линий и многоугольников
Подробно о точках
Подробно о линиях
Подробно о многоугольниках
Векторы нормали
Массивы вершин
Шаг 1: активация массивов
Шаг 2: помещение данных в массивы
Шаг 3: разыменование и рисование
Смешанные массивы
Группы атрибутов
Несколько советов по построению полигональных моделей поверхностей
Пример: построение икосаэдра
Глава 3. Визуализация
Обзор: аналогия с камерой
Пример: рисование куба
Команды преобразования общего назначения
Модельно-видовые преобразования
Размышления о преобразованиях
Модельные преобразования
Видовые преобразования
Преобразования проецирования
Перспективное проецирование
Ортогональное проецирование
Отсечение объемом видимости
Преобразование окна просмотра
Определение окна просмотра
Измененная координата глубины
Проблемы преобразований
Управление стеком матриц
Стек модельно-видовых матриц
Стек матриц проекций
Дополнительные плоскости отсечения
Примеры объединения нескольких преобразований
Солнечная система
Сочлененная рука робота
Обратные, или имитационные, преобразования
Глава 4. Цвет
Цветовосприятие
Вычисление цвета
RGBA в сравнении с индексированным цветом
Режим RGBA
Режим индексации цвета
Выбор между режимами RGBA и индексации цвета
Переключение между режимами
Задание цветовой и полутоновой моделей
Задание цвета в режиме RGBA
Задание цвета в режиме индексации цвета
Задание модели закрашивания
Глава 5. Освещение
Удаление невидимых поверхностей
Реальный мир и освещение в OpenGL
Фоновый, рассеянный, отраженный и излучаемый свет
Цвета материала
Значения RGB для источников света и материалов
Пример: рисование освещенной сферы
Задание векторов нормалей для каждой вершины каждого объекта
Создание, размещение и включение одного
или нескольких источников света
Выбор модели освещения
Задание свойств материала для объектов в сцене
Замечания на память
Создание источников света
Цвет
Положение и ослабление
Прожекторы
Несколько источников света
Управление положением и направлением источников света
Выбор модели освещения
Общее фоновое освещение
Локальная или бесконечно удаленная точка обзора
Двухстороннее освещение
Вторичный отраженный цвет
Включение источников света
Задание свойств материала
Рассеянное и фоновое отражение
Зеркальное отражение
Излучение
Изменение свойств материала
Режим цвета материала
Математика освещения
Излучение материала
Масштабированный общий фоновый свет
Вклады от источников света
Вторичный отраженный цвет
Освещение в режиме индексации цвета
Математика освещения в режиме индексации цвета
Глава 6. Смешивание, сглаживание, туман и отклонение
Смешивание
Факторы влияния источника и получателя
Включение смешивания
Объединение пикселов на основе выражений
Область применения смешивания
Пример смешивания
Трехмерное смешивание с использованием буфера глубины
Сглаживание
Сглаживание точек или линий
Сглаживание геометрических примитивов с помощью мультивыборки
Альфа-компонент и покрытие мультивыборки
Сглаживание границ многоугольников
Туман
Применение тумана
Уравнения тумана
Координаты тумана
Параметры точки
Отклонение многоугольников по глубине
Глава 7. Списки отображения
Для чего нужны списки отображения
Пример списка отображения
Философия проектирования списков отображения
Создание и выполнение списка отображения
Присвоение имени списку отображения и создание списка
Что сохраняется в списке отображения?
Выполнение списка отображения
Иерархические списки отбражения
Управление индексацией списков отображений
Выполнение составных списков отображения
Управление параметрами состояния с помощью списков отображения
Инкапсуляция изменений режима
Глава 8. Вывод пикселов, битовых образов,
шрифтов и изображений
Битовые образы и шрифты
Текущая позиция растра
Вывод битового образа
Выбор цвета для битового образа
Шрифты и списки отображения
Описание и использование полного шрифта
Изображения
Чтение, запись и копирование пикселов
Конвейерная обработка изображений
Упаковка и распаковка пикселов
Режимы хранения пикселов
Операции при передаче пикселов
Табличные преобразования пикселов
Растяжение, сжатие и зеркальное отражение изображений
Чтение и рисование прямоугольных областей
Процесс вывода пиксельного прямоугольника
Советы по увеличению быстродействия вывода пикселов
Расширение Imaging Subset
Таблицы цветов
Свертки
Матрица цвета
Гистограмма
Метод минимакса
Глава 9. Наложение текстур
Общий обзор и пример
Действия при наложении текстур
Пример программы
Описание текстуры
Текстуры-посредники
Замещение изображения текстуры или его части
Одномерные текстуры
Трехмерные текстуры
Сжатые изображения текстур
Использование границ текстуры
MIP-отображение: детализация на множестве уровней
Фильтрация
Объекты текстур
Присвоение имен объектам текстур
Создание и использование объектов текстур
Удаление объектов текстур
Рабочий набор резидентных текстур
Функции текстур
Присвоение координат текстур
Вычисление подходящих координат текстуры
Повторяемые и обрезанные текстуры
Автоматическая генерация координат текстур
Создание контуров
“Сферические” карты
“Кубические” текстуры
Мультитекстурирование
Комбинирование функций текстур
Интерполирующие функции комбинирования
Применение вторичного цвета после текстурирования
Вторичный цвет при отключенном освещении
Вторичный отраженный цвет при отключенном освещении
Стек матриц текстур
Глубина текстур
Создание “теневой” карты
Генерация координат текстур и их отображение
Глава 10. Буфер кадров
Буферы и их применение
Буферы цвета
Очистка буферов
Выбор буферов цвета для записи и чтения
Маскирование буферов
Тесты и операции над фрагментами
Тест на отсечение
Альфа-тест
Тест трафарета
Тест глубины
Смешивание, размытие и логические операции
Буфер накопления
Сглаживание сцены
Размытие при движении
Глубина резкости
Плавные тени
“Дрожание”
Глава 11. Мозаичное представление
и поверхности второго порядка
Мозаичное представление многоугольников
Создание объекта разбиения
Процедуры обратной связи
Свойства мозаичного разбиения
Описание многоугольника
Удаление объекта разбиения
Советы по увеличению производительности разбиения
Сообщения об ошибках GLU
Обратная совместимость
Поверхности второго порядка: сферы, цилиндры и диски
Управление квадратичными объектами
Управление атрибутами квадратичных объектов
Квадратичные примитивы
Глава 12. Вычислители и NURBS
Необходимые знания
Вычислители
Одномерные вычислители
Двухмерные вычислители
Применение вычислителей для текстур
Интерфейс NURBS библиотеки GLU
Пример простого NURBS-объекта
Управление NURBS-объектом
Создание NURBS-кривой или поверхности
Усечение NURBS-поверхностей
Глава 13. Выбор и обратная связь
Выбор
Основные шаги
Создание стека имен
Буфер выбора
Пример выбора
Выбор с помощью указателя мыши
Рекомендации по написанию программы,
использующей механизм выбора
Обратная связь
Массив обратной связи
Использование маркеров в режиме обратной связи
Пример обратной связи
Глава 14. Теперь, когда вы знаете многое
Обработка ошибок
Какую версию я использую?
Версия библиотеки инструментов
Версии расширений для оконных систем
Расширения стандарта
Расширения стандарта для Microsoft Windows (WGL)
Полупрозрачность
Простой эффект “растворения” изображения
Использование фонового буфера для выбора объектов
Простая трансформация изображения
Послойное отображение
Сглаживание символов
Рисование округлых точек
Интерполяция изображений
Создание устойчивых изображений
Рисование закрашенных вогнутых многоугольников
с помощью буфера трафарета
Нахождение перекрывающихся областей
Тени
Удаление невидимых линий
Удаление невидимых линий со смещением многоугольника
Удаление невидимых линий с помощью буфера трафарета
Текстурирование
Рисование изображений с буферизацией глубины
Области Дирихле
“Жизнь” в буфере трафарета
Альтернативное применение glDrawPixels() и glCopyPixels()
Приложения
Приложение A. Порядок выполнения операций
Общий обзор
Векторные операции
Операции над вершинами
Сборка примитивов
Операции над пикселами
Память текстур
Операции над фрагментами
Прочее
Приложение Б. Параметры состояния
Команды запроса
Параметры состояния OpenGL
Текущие значения и связанные данные
Массив вершин
Преобразования
Окрашивание
Освещение
Растеризация
Мультивыборка
Текстурирование
Операции над пикселами
Управление буфером кадров
Пикселы
Вычислители
Рекомендации
Параметры, зависящие от реализации
Параметры глубины, зависящие от реализации
Прочее
Приложение В. OpenGL и оконные системы
Обращение к новым функциям OpenGL
GLX: расширение OpenGL для X Window System
Инициализация
Управление визуализацией
Прототипы GLX
AGL: расширение OpenGL для Apple Macintosh
Инициализация
Визуализация и контексты
Управление контекстом визуализации OpenGL
Экранная визуализация
Внеэкранная визуализация
Полноэкранная визуализация
Перестановка буферов
Обновление буферов визуализации
Использование шрифтов Apple Macintosh
Обработка ошибок
Прототипы AGL
PGL: расширение OpenGL для IBM OS/2 Warp
Инициализация
Управление визуализацией
Прототипы PGL
WGL: расширение OpenGL для Microsoft Windows 95/98/NT/ME/2000/XP
Инициализация
Управление визуализацией
Прототипы WGL
Приложение Г. Основы GLUT: инструментальный набор пакета разработчика OpenGL
Инициализация и создание окон
Управление окнами и событиями
Загрузка карты цвета
Инициализация и отображение трехмерных объектов
Управление фоновыми процессами
Запуск программ
Приложение Д. Вычисление векторов нормалей
Нахождение нормалей к аналитическим поверхностям
Нахождение нормалей к полигональным поверхностям
Приложение Е. Однородные координаты
и матричные преобразования
Однородные координаты
Преобразование вершин
Преобразование нормалей
Матричные преобразования
Параллельный перенос
Масштабирование
Поворот
Перспективная проекция
Ортогональная проекция
Приложение Ж. Приемы программирования
Правильное обращение с OpenGL
Приемы увеличения производительности
Советы по применению GLX
Приложение З. OpenGL и инвариантность
Словарь терминов
Алфавитный указатель