Краткое содержание
Введение............................................................... 18
Глава 1. Введение в компьютерную графику................................... 28
Глава 2. Начальная стадия: рисование фигур.................................. 67
Глава 3. Дополнительные инструменты для рисования.......................... 118
Глава 4. Векторные инструменты для графики................................. 192
Глава 5. Преобразования объектов......................................... 263
Глава 6. Моделирование поверхностей полигональными сетками................... 350
Глава 7. Трехмерный просмотр............................................ 426
Глава 8. Визуализация граней для усиления реалистичности...................... 481
Глава 9. Приближение к бесконечности...................................... 551
Глава 10. Средства для растровой графики.................................... 617
Глава 11. Создание кривых и поверхностей.................................... 689
Глава 12. Теория цвета................................................... 770
Глава 13. Удаление невидимых поверхностей.................................. 799
Глава 14. Введение в трассировку лучей...................................... 838
Приложение А. Графический инструментарий: получение OpenGL................... 939
Приложение Б. Немного математики для компьютерной графики ................... 941
Приложение В. Некоторые полезные классы и служебные подпрограммы ............. 956
Приложение Г. Введение в PostScript®......................................................................1001
Приложение Д. Введение в SDL.............................................1038
Литература............................................................1046
Список терминов........................................................1058
Алфавитный указатель...................................................1065
Содержание
Введение...........................................................18
Предполагаемая аудитория............................................................... 18
Необходимая математическая подготовка ................................................ 18
Необходимая подготовка по программированию........................................... 19
Философия книги....................................................................... 19
Упражнения и задачи............................................................... 19
Использование OpenGL.............................................................. 20
Использование C++ в качестве языка программирования..................................... 20
Акцент на трехмерной компьютерной графике............................................. 21
Описание 3D-сцен с помощью языка проектирования сцен.................................... 21
Дополнительное использование PostScript................................................ 21
Структура книги и планы курса............................................................. 21
Краткий обзор глав................................................................. 22
Рекомендуемые последовательности изучения глав книги.................................... 25
Возможные планы курса............................................................. 25
Дополнения........................................................................... 25
Благодарности......................................................................... 25
Примечание для читателя: как смотреть стереоскопические изображения............................. 27
Об авторе............................................................................ 27
От издательства........................................................................ 27
Глава 1. Введение в компьютерную графику............................28
1.1. Что такое компьютерная графика?....................................................... 28
1.2. Где используются изображения, создаваемые компьютером.................................... 30
1.2.1. Искусство, развлечения и издательское дело......................................... 30
1.2.2. Компьютерная графика и обработка изображений..................................... 31
1.2.3. Управление процессом.......................................................... 32
1.2.4. Отображение имитаций......................................................... 33
1.2.5. Автоматизированное проектирование............................................... 34
1.2.6. Научный анализ и наглядность.................................................... 36
1.3. Элементы изображений, создаваемых в компьютерной графике................................. 37
1.3.1. Ломаные линии............................................................... 38
1.3.2. Текст....................................................................... 40
1.3.3. Закрашенные области .......................................................... 42
1.3.4. Растровое изображение......................................................... 43
1.3.5. Представление оттенков серого и других цветов в растровых изображениях.................. 47
1.4. Графические устройства отображения.................................................... 50
1.4.1. Графические дисплеи........................................................... 51
1.4.2. Растровые отображающие устройства............................................... 52
1.4.3. Индексированный цвет и кодовая таблица........................................... 56
1.4.4. Другие устройства растрового отображения.......................................... 58
1.4.5. Растровые устройства для изготовления твердых копий................................. 59
1.5. Входные графические примитивы и устройства............................................. 61
1.5.1. Типы входных графических примитивов............................................. 61
1.5.2. Типы физических входных устройств............................................... 62
1.6. Заключение........................................................................ 65
1.7. Дополнительная литература............................................................ 66
Глава 2. Начальная стадия: рисование фигур............................67
2.1. Начальная стадия создания изображения.................................................. 68
2.1.1. Аппаратно-независимое программирование и OpenGL................................... 69
2.1.2. Оконное программирование...................................................... 70
2.1.3. Открытие окна для рисования.................................................... 72
2.2. Рисование основных графических примитивов.............................................. 73
2.2.1. Рисование созвездия точек....................................................... 78
2.3. Создание рисунков из линий........................................................... 83
2.3.1. Рисование ломаных линий и полигонов............................................. 86
2.3.2. Рисование линий с использованием moveto() и lineto().................................. 91
2.3.3. Рисование выровненных прямоугольников........................................... 92
2.3.4. Форматное соотношение выровненного прямоугольника................................. 94
2.3.5. Закрашивание полигонов........................................................ 96
2.3.6. Другие графические примитивы в OpenGL........................................... 97
2.4. Простое взаимодействие с помощью мыши и клавиатуры...................................... 98
2.4.1. Взаимодействие с помощью мыши................................................. 98
2.4.2. Взаимодействие с помощью клавиатуры............................................ 102
2.5. Резюме.......................................................................... 103
2.6. Тематические задания............................................................... 103
Тематическое задание 2.1. Псевдослучайные облака из точек ................................ 104
Тематическое задание 2.2. Введение в систему итерируемых функций.......................... 106
Тематическое задание 2.3. Золотое отношение и другие жемчужины........................... 109
Тематическое задание 2.4. Создание и применение файлов для ломаных линий................... 112
Тематическое задание 2.5. Рисование линий и многоугольников пунктиром...................... 113
Тематическое задание 2.6. Редактор ломаных линий....................................... 114
Тематическое задание 2.7. Построение и запуск лабиринтов.................................. 115
2.7. Дополнительная литература........................................................... 117
Глава 3. Дополнительные инструменты для рисования...................118
3.1. Введение......................................................................... 119
3.2. Мировые окна и порты просмотра...................................................... 120
3.2.1. Преобразование из мирового окна в порт просмотра................................... 121
3.2.2. Автоматическая установка окна и порта просмотра.................................... 132
3.3. Отсечение линий................................................................... 135
3.3.1. Отсечение прямой............................................................ 135
3.3.2. Алгоритм отсечения Кохена-Сазерленда............................................ 136
3.4. Разработка класса Canvas ............................................................ 140
3.4.1. Несколько полезных вспомогательных классов....................................... 141
3.4.2. Реализация класса Canvas...................................................... 144
3.5. Относительное рисование............................................................ 146
3.5.1. Разработка moveRel() и lineRel().................................................. 146
3.5.2. Черепашья графика........................................................... 148
3.6. Фигуры на основе правильных многоугольников ........................................... 153
3.6.1. Правильные многоугольники.................................................... 153
3.6.2. Вариации n-угольников........................................................ 155
3.7. Рисование окружностей и дуг.......................................................... 159
3.7.1. Рисование дуг............................................................... 159
3.8. Применение параметрического задания кривой............................................ 164
3.8.1. Параметрические формы для кривых.............................................. 165
3.8.2. Вычерчивание кривых, заданных параметрически..................................... 167
3.8.3. Суперэллипсы............................................................... 169
3.8.4. Формы в полярных координатах.................................................. 170
3.8.5. Трехмерные кривые........................................................... 172
3.9. Резюме.......................................................................... 174
3.10. Тематические задания............................................................... 175
Тематическое задание 3.1. Изучение логистического преобразования и имитация хаоса.......175
Тематическое задание 3.2. Реализация отсекателя Кохена—Сазерленда на С или C++.......177
Тематическое задание 3.3. Реализация Canvas на Turbo C++................................. 179
Тематическое задание 3.4. Рисование арок.............................................. 182
Тематическое задание 3.5. Некоторые рисунки, используемые в физике и технике................. 183
Тематическое задание 3.6. Мозаики.................................................... 186
Тематическое задание 3.7. Веселые вариации на тему...................................... 187
Тематическое задание 3.8. Окружности, вращающиеся вокруг окружностей...................... 189
Тематическое задание 3.9. Суперэллипсы............................................... 190
3.11. Дополнительная литература.......................................................... 191
Глава 4. Векторные инструменты для графики..........................192
4.1. Введение......................................................................... 193
4.2. Обзор векторов.................................................................... 195
4.2.1. Операции с векторами......................................................... 197
4.2.2. Линейные комбинации векторов.................................................. 198
4.2.3. Модуль вектора; единичные векторы.............................................. 200
4.3. Скалярное произведение............................................................. 201
4.3.1. Свойства скалярного произведения............................................... 201
4.3.2. Угол между двумя векторами.................................................... 202
4.3.3. Знак b•с и перпендикулярность.................................................. 203
4.3.4. Двумерный «перп» вектор...................................................... 204
4.3.5. Ортогональные проекции и расстояние от точки до прямой............................. 206
4.3.6. Приложения проекции: отражения................................................ 208
4.4. Векторное произведение двух векторов.................................................. 209
4.4.1. Геометрическая интерпретация векторного произведения............................... 210
4.4.2. Нахождение нормали к плоскости................................................. 211
4.5. Отображение ключевых геометрических объектов.......................................... 212
4.5.1. Системы координат и координатные фреймы........................................ 213
4.5.2. Аффинные комбинации точек.................................................... 216
4.5.3. Линейная интерполяция двух точек............................................... 219
4.5.4. Твининг в искусстве и анимации.................................................. 219
4.5.5. Обзор: квадратичный и кубический твининг и кривые Безье............................. 222
4.5.6. Представление прямых и плоскостей.............................................. 222
4.6. Определение точки пересечения двух отрезков прямой...................................... 231
4.6.1. Приложение пересечения прямых: окружность, проходящая через три заданные точки......... 234
4.7. Пересечения прямых с плоскостями; отсечение............................................ 236
4.8. Задачи о пересечениях многоугольников................................................. 238
4.8.1. Работа с выпуклыми полигонами и полиэдрами...................................... 239
4.8.2. Пересечение с лучами и отсечение для выпуклых полигонов............................. 240
4.8.3. Алгоритм Сайруса—Бека....................................................... 243
4.8.4. Отсечение границами произвольных полигонов...................................... 246
4.8.5. Более сложное отсечение....................................................... 248
4.9. Резюме.......................................................................... 249
4.10. Тематические задания............................................................... 250
Тематическое задание 4.1. Анимация с твинингом......................................... 250
Тематическое задание 4.2. Разные окружности ........................................... 250
Тематическое задание 4.3. Находится ли точка Q внутри выпуклого полигона Р?.................. 252
Тематическое задание 4.4. Отражения в комнате (двумерная трассировка луча)................... 253
Тематическое задание 4.5. Отсечение Сайруса—Бека....................................... 254
Тематическое задание 4.6. Отсечение полигона границами выпуклого полигона: отсечение
Сазерленда—Ходгмана........................................................... 254
Тематическое задание 4.7. Отсечение одного полигона границами другого: отсечение
Вейлера—Азертона............................................................. 257
Тематическое задание 4.8. Булевы операции с полигонами .................................. 260
4.11. Дополнительная литература.......................................................... 262
Глава 5. Преобразования объектов....................................263
5.1. Введение......................................................................... 264
5.2. Введение в преобразования........................................................... 265
5.2.1. Преобразование точек и объектов................................................ 268
5.2.2. Аффинные преобразования..................................................... 270
5.2.3. Геометрические эффекты элементарных двумерных аффинных преобразований........271
5.2.4. Инвертирование аффинного преобразования........................................ 276
5.2.5. Композиция аффинных преобразований............................................ 278
5.2.6. Примеры композиции двумерных преобразований .................................... 279
5.2.7. Некоторые полезные свойства аффинных преобразований.............................. 284
5.3. Трехмерные аффинные преобразования.................................................. 289
5.3.1. Элементарные трехмерные преобразования......................................... 289
5.3.2. Компонование трехмерных аффинных преобразований................................. 293
5.3.3. Комбинирование поворотов..................................................... 294
5.3.4. Краткое изложение свойств трехмерных аффинных преобразований....................... 299
5.4. Изменения систем координат.......................................................... 300
5.5. Использование аффинных преобразований в программах..................................... 303
5.5.1. Сохранение СТ для дальнейшего использования...................................... 311
5.6. Рисование трехмерных сцен с применением OpenGL......................................... 316
5.6.1. Знакомство с процессом визуального отображения и графическим конвейером...........316
5.6.2. Некоторые инструменты OpenGL для моделирования и вида............................. 320
5.6.3. Рисование элементарных форм, поддерживаемых OpenGL............................... 323
5.7. Резюме.......................................................................... 338
5.8. Тематические задания............................................................... 339
Тематическое задание 5.1. Выполнение вашего собственного преобразования с помощью
СТ в классе Canvas.............................................................. 339
Тематическое задание 5.2. Рисование звезды с рисунка 5.39 с помощью многократных поворотов..... 340
Тематическое задание 5.3. Разложение двумерного аффинного преобразования.................. 340
Тематическое задание 5.4. Обобщенные трехмерные сдвиги ................................. 344
Тематическое задание 5.5. Вращение вокруг оси: конструктивный подход....................... 346
Тематическое задание 5.6. Разложение трехмерных аффинных преобразований................... 347
Тематическое задание 5.7. Рисование трехмерных сцен, описанных на языке SDL.................. 349
5.9. Дополнительная литература.......................................................... 349
Глава 6. Моделирование поверхностей полигональными сетками.........350
6.1. Введение......................................................................... 351
6.2. Введение в трехмерное моделирование полигональными сетками............................... 351
6.2.1. Определение полигональной сетки................................................ 353
6.2.2. Нахождение нормальных векторов................................................ 355
6.2.3. Свойства сеток............................................................... 357
6.2.4. Каркасные модели для немонолитных объектов...................................... 358
6.2.5. Работа с сетками в программе................................................... 359
6.3. Многогранники.................................................................... 363
6.3.1. Призмы и антипризмы......................................................... 365
6.3.2. Платоновы тела.............................................................. 366
6.3.3. Другие любопытные многогранники............................................... 371
6.4. Экструзивные формы................................................................ 375
6.4.1. Создание призм.............................................................. 375
6.4.2. Совокупности экструзивных призм: «кирпичная кладка»................................ 376
6.4.3. Экструзии с «поворотом»....................................................... 378
6.4.4. Создание сегментированных экструзий: трубки и змейки................................ 379
6.4.5. «Дискретно» заметаемые поверхности вращения..................................... 385
6.5. Каркасные аппроксимации гладких объектов.............................................. 386
6.5.1. Представления поверхностей.................................................... 386
6.5.2. Нормальный вектор к поверхности................................................ 388
6.5.3. Влияние аффинного преобразования.............................................. 389
6.5.4. Три «базовые» формы: сфера, цилиндр и конус...................................... 391
6.5.5. Формирование полигональной сетки для криволинейной поверхности...................... 394
6.5.6. Линейчатые поверхности....................................................... 396
6.5.7. Поверхности вращения......................................................... 402
6.5.8. Поверхности второго порядка.................................................... 404
6.5.9. Суперквадрики............................................................... 408
6.5.10. Трубки на базе трехмерных кривых............................................... 409
6.5.11. Поверхности на базе явных функций двух переменных................................. 410
6.6. Заключение....................................................................... 411
6.7. Тематические задания............................................................... 412
Тематическое задание 6.1. Сетки, записанные в файл ..................................... 412
Тематическое задание 6.2. Вывод метода Ньгаэлла........................................ 414
Тематическое задание 6.3. Призма.................................................... 416
Тематическое задание 6.4. Совокупность призм и экструдированные полосы из четырехугольников ... 417
Тематическое задание 6.5. Трубки и змейки на базе параметрической кривой.................... 418
Тематическое задание 6.6. Построение поверхностей вращения с дискретными шагами....... 419
Тематическое задание 6.7. Списки ребер и каркасные модели ............................... 419
Тематическое задание 6.8. Сводчатые потолки........................................... 420
Тематическое задание 6.9. О Платоновых телах.......................................... 420
Тематическое задание 6.10. Об Архимедовых телах........................................ 420
Тематическое задание 6.11. Алгебраическая форма поверхностей второго порядка................. 420
Тематическое задание 6.12. Сцены с супеквздриками....................................... 422
Тематическое задание 6.13. Рисование гладких параметрических поверхностей................... 422
Тематическое задание 6.14. Сузить, закрутить, изогнуть и расплющить......................... 423
6.8. Дополнительная литература .......................................................... 425
Глава 7. Трехмерный просмотр.......................................426
7.1. Введение......................................................................... 427
7.2. Снова о камере.................................................................... 427
7.2.1. Установка отображаемого объема................................................. 428
7.2.2. Позиционирование и ориентирование камеры........................................ 429
7.3. Встраивание камеры в программу....................................................... 434
7.3.1. «Пилотирование» камеры....................................................... 436
7.4. Перспективные проекции трехмерных объектов............................................ 440
7.4.1. Перспективная проекция точки................................................... 441
7.4.2. Перспективная проекция прямой линии............................................ 444
7.4.3. Включение перспективы в графический конвейер..................................... 449
7.4.4. Отсечение граней границами отображаемого объема.................................. 456
7.5. Создание стереоизображений ......................................................... 453
7.6. Классификация проекций............................................................. 465
7.6.1. Одно-, двух- и трехточечные перспективы.......................................... 465
7.6.2. Параллельные проекции........................................................ 470
7.7. Резюме.......................................................................... 477
7.8. Тематические задания............................................................... 477
Тематическое задание 7.1. «Пилотирование» камеры по сцене................................ 477
Тематическое задание 7.2. Стереоизображения........................................... 478
Тематическое задание 7.3. Создание параллельных проекций ................................ 478
Тематическое задание 7.4. Самодельное проецирование (если бы OpenGL был недоступен).......... 479
Тематическое задание 7.5. Удаление невидимых граней для большей эффективности...........479
7.9. Дополнительная литература........................................................... 480
Глава 8. Визуализация граней для усиления реалистичности.............481
8.1. Введение......................................................................... 482
8.2. Введение в модели закрашивания...................................................... 486
8.2.1. Геометрические составляющие для нахождения отраженного света....................... 487
8.2.2. Вычисление диффузной составляющей ............................................ 488
8.2.3. Зеркальное отражение......................................................... 489
8.2.4. Роль фонового света.......................................................... 492
8.2.5. Комбинирование компонентов освещения........................................... 493
8.2.6. Добавление цвета............................................................ 494
8.2.7. Закраска и графический конвейер ................................................ 496
8.2.8. Использование источников света в OpenGL.......................................... 497
8.2.9. Работа со свойствами материалов в OpenGL......................................... 503
8.2.10. Закраска сцен, заданных с помощью SDL........................................... 503
8.3. Плоское и плавное закрашивание...................................................... 504
8.3.1. Плоское закрашивание......................................................... 506
8.3.2. Плавное закрашивание ........................................................ 507
8.4. Удаление невидимых поверхностей..................................................... 511
8.4.1. Использование буфера глубины.................................................. 511
8.5. Добавление текстуры к граням......................................................... 514
8.5.1. Наложение текстуры на плоскую поверхность........................................ 517
8.5.2. Визуализация текстуры ........................................................ 519
8.5.3. Что регулирует текстура?....................................................... 526
8.5.4. Пример текстурирования с использованием OpenGL................................... 528
8.5.5. Обертывание текстуры вокруг криволинейных поверхностей............................. 534
8.5.6. Отображение отражений....................................................... 539
8.6. Добавление теней объектов........................................................... 542
8.6.1. Тени как текстура ............................................................ 543
8.6.2. Создание теней с помощью буфера теней........................................... 544
8.7. Заключение....................................................................... 546
8.8. Тематические задания............................................................... 547
Тематическое задание 8.1. Создание закрашенных объектов с использованием OpenGL......547
Тематическое задание 8.2. Самодельный графический конвейер.............................. 548
Тематическое задание 8.3. Добавление закраски полигонов и удаления невидимых поверхностей при помощи буфера глубины...................................................... 548
Тематическое задание 8.4. Визуализация текстуры......................................... 548
Тематическое задание 8.5. Применение процедурных 3D-текстур.............................. 548
Тематическое задание 8.6. Рисование теней.............................................. 549
Тематическое задание 8.7. Расширение SDL с целью включения текстурирования.................. 549
8.9. Дополнительная литература .......................................................... 550
Глава 9. Приближение к бесконечности................................ 551
9.1. Введение......................................................................... 552
9.2. Фракталы и самоподобие............................................................. 552
9.2.1. Последовательное усложнение кривых............................................. 553
9.2.2. Рисование кривых и снежинок Коха............................................... 554
9.2.3. Дробная размерность.......................................................... 556
9.3. Создание строк и кривые Пеано........................................................ 557
9.3.1. Рекурсивная генерация строк и рисование в программе................................ 559
9.3.2. Разрешение ветвления......................................................... 562
9.3.3. Добавление случайности и сужения............................................... 565
9.4. Замощение плоскости............................................................... 565
9.4.1. Моноэдрические мозаики....................................................... 566
9.4.2. Диэдральные мозаичные размещения.............................................. 568
9.4.3. Рисование мозаик ............................................................ 571
9.4.4. Рептилии................................................................... 571
9.5. Создание изображений с использованием системы итерируемых функций ..................574
9.5.1. Экспериментальный копир...................................................... 574
9.5.2. Теоретические основы процесса копирования........................................ 576
9.5.3. Рисование k-й итерации........................................................ 577
9.5.4. «Игра в Хаос»............................................................... 579
9.5.5. Нахождение системы IFS; фрактальное сжатие изображений............................ 582
9.6. Множество Мандельброта............................................................ 586
9.6.1. Множества Мандельброта и системы итерируемых функций............................. 586
9.6.2. Определение множества Мандельброта............................................ 590
9.6.3. Определение того, находится ли точка с в пределах множества Мандельброта.........592
9.6.4. Рисование множества Мандельброта .............................................. 593
9.6.5. Некоторые замечания по поводу множества Мандельброта.............................. 595
9.7. Множества Жюлиа.................................................................. 595
9.7.1. Плотное множество Жюлиа Kc................................................... 596
9.7.2. Рисование плотных множеств Жюлиа.............................................. 596
9.7.3. Некоторые замечания относительно неподвижных точек и бассейнов притяжения......596
9.7.4. Множество Жюлиа Jc.......................................................... 599
9.8. Случайные фракталы................................................................ 602
9.8.1. Фрактализация отрезка........................................................ 602
9.8.2. Контроль за спектральной плотностью фрактальной кривой............................. 604
9.9. Резюме.......................................................................... 606
9.10. Тематические задания............................................................... 607
Тематическое задание 9.1. Рисование по генерации строк................................... 607
Тематическое задание 9.2. Рисование снежинок и рептилий.................................. 608
Тематическое задание 9.3. «Игра в Хаос» ............................................... 610
Тематическое задание 9.4. Рисование орбит внутри множества Мандельброта.................... 611
Тематическое задание 9.5. Создание изображений множества Мандельброта..................... 612
Тематическое задание 9.6. Создание изображений множеств Жюлиа........................... 612
Тематическое задание 9.7. Непериодические мозаики; мозаики Пенроуза........................ 612
Тематическое задание 9.8. Фрактализация кривых......................................... 614
Тематическое задание 9.9. Моделирование фрактализованных гор............................. 615
9.11. Дополнительная литература.......................................................... 616
Глава 10. Средства для растровой графики............................. 617
10.1. Введение........................................................................ 618
10.2. Управление пиксельными картами..................................................... 619
10.2.1. Важные операции с пиксельными картами......................................... 619
10.2.2. Типы данных, используемые для пиксельных карт................................... 620
10.2.3. Масштабирование и поворот изображений......................................... 627
10.3. Объединение пиксельных карт........................................................ 630
10.3.1. Цикл «чтение — модификация-запись»........................................... 631
10.3.2. Альфа-канал и смешивание изображений.......................................... 632
10.3.3. Логические комбинации пиксельных карт.......................................... 636
10.3.4. Операция BitBLT............................................................. 640
10.4. Рисование прямых своими силами: алгоритм Брезенхема.................................... 641
10.4.1. Алгоритм Брезенхема для рисования прямых линий.................................. 642
10.5. Определение и заполнение областей из пикселов.......................................... 648
10.5.1. Задание областей............................................................ 648
10.5.2. Пиксельно-определенные области............................................... 649
10.5.3. Рекурсивный алгоритм заливки.................................................. 650
10.5.4. Заполнение областей узорами .................................................. 652
10.5.5. Использование связности: заполнение области на основе серий пикселов.................. 653
10.6. Манипулирование символически-определенными областями.................................. 655
10.6.1. Области, описываемые прямоугольниками......................................... 655
10.6.2. Области, заданные контуром................................................... 657
10.7. Заполнение полигонально-определенных областей......................................... 658
10.7.1. Какие пикселы ребра принадлежат полигону?....................................... 659
10.7.2. Повышение эффективности алгоритма............................................ 662
10.8. Ступенчатость; технологии сглаживания................................................ 666
10.8.1. Технологии сглаживания...................................................... 667
10.8.2. Сглаживание текстуры........................................................ 672
10.8.3. Сглаживание с применением OpenGL............................................. 675
10.9. Увеличение количества цветов и оттенков............................................... 676
10.9.1. Упорядоченное размытие...................................................... 678
10.9.2. Рассеивание ошибок.......................................................... 682
10.10. Резюме......................................................................... 684
10.11. Тематические задания.............................................................. 685
Тематическое задание 10.1. Чтение и просмотр BMP-файлов изображений....................... 685
Тематическое задание 10.2. Растворение одной пиксельной карты в другой с помощью OpenGL....... 686
Тематическое задание 10.3. Заполнение области на основе серий............................. 686
Тематическое задание 10.4. Работа со структурой данных «формы»............................ 686
Тематическое задание 10.5. Цепное кодирование форм..................................... 687
Тематическое задание 10.6. Заполнение «горизонтально-выпуклых» полигонов................... 687
Тематическое задание 10.7. Заполнение полигона общего вида............................... 688
Тематическое задание 10.8. Рассеивание ошибок.......................................... 688
10.12. Дополнительная литература ......................................................... 688
Глава 11. Создание кривых и поверхностей............................689
11.1. Введение........................................................................ 690
11.1.1. Параметрические кривые как траектории.......................................... 690
11.1.2. Плавность движения......................................................... 691
11.2. Описание кривых полиномами........................................................ 695
11.3. Интерактивное конструирование кривых ................................................ 700
11.4. Применение кривых Безье для построения кривых......................................... 702
11.4.1. Алгоритм де Кастельо......................................................... 702
11.5. Свойства кривых Безье ............................................................. 707
11.6. Нахождение лучших стыковочных функций.............................................. 712
11.6.1. Проблема локального контроля ................................................. 712
11.6.2. Список пожеланий для множества стыковочных функций.............................. 713
11.6.3. Кусочно-полиномиальные кривые и сплайны ....................................... 715
11.6.4. Построение из g(t) множества стыковочных функций................................. 717
11.6.5. Сплайны и базисные функции .................................................. 720
11.7. Базисные функции В-сплайнов........................................................ 721
11.7.1. Определение В-сплайн функций................................................. 721
11.7.2. Использование кратных узлов в узловом векторе..................................... 726
11.7.3. Незамкнутые В-сплайн кривые: стандартный узловой вектор............................ 727
11.8. Полезные для дизайна свойства В-сплайн кривых.......................................... 730
11.8.1. Использование кратных контрольных точек........................................ 732
11.9. Рациональные сплайны и NURBS-кривые................................................ 733
11.10. Краткое знакомство с интерполяцией................................................... 737
11.10.1. Интерполяция посредством кусочных кубических полиномов........................... 737
11.10.2. Эрмитова интерполяция...................................................... 739
11.10.3. Естественные кубические сплайны.............................................. 742
11.10.4. Вычисление наклонов при кубической интерполяции ................................ 743
11.10.5. Интерактивное задание касательных векторов ..................................... 748
11.11. Моделирование криволинейных поверхностей............................................ 748
11.11.1. Линейчатые поверхности на базе В-сплайнов...................................... 748
11.11.2. Поверхности вращения на базе В-сплайнов........................................ 749
11.11.3. Лоскуты Безье............................................................. 751
11.11.4. Сшивание лоскутов Безье..................................................... 752
11.11.5. В-сплайн лоскуты........................................................... 754
11.11.6. NURBS-поверхности......................................................... 755
11.12. Резюме......................................................................... 757
11.13. Тематические задания.............................................................. 759
Тематическое задание 11.1. Попурри из интересных параметрических кривых.................... 759
Тематическое задание 11.2. «Эллиптипул».............................................. 760
Тематическое задание 11.3. Кривые Безье.............................................. 762
Тематическое задание 11.4. Генератор квадратичной сплайн-кривой .......................... 762
Тематическое задание 11.5. Создание редактора сплайн-кривых.............................. 762
Тематическое задание 11.6. Интерполяция контрольных точек В-сплайнами..................... 763
Тематическое задание 11.7. Интерполяция кубическими полиномами.......................... 765
Тематическое задание 11.8. Многоуважаемый чайник...................................... 765
Тематическое задание 11.9. Инвариантность относительно проективных преобразований..766
Тематическое задание 11.10. Рисование NURBS-лоскутов.................................... 767
11.14. Дополнительная литература ......................................................... 769
Глава 12. Теория цвета..............................................770
12.1. Введение........................................................................ 770
12.2. Описания цветов.................................................................. 772
12.2.1. Доминантная длина волны..................................................... 773
12.2.2. Подбор цветов.............................................................. 774
12.3. Международная комиссия по стандартам освещенности..................................... 777
12.3.1. Построение CIE-диаграммы .................................................... 778
12.3.2. Использование хроматической CIE-диаграммы...................................... 780
12.3.3. Цветовые охваты............................................................ 781
12.4. Цветовые пространства............................................................. 782
12.4.1. Цветовые пространства RGB и CMY............................................... 782
12.4.2. Аддитивные и субтрактивные цветовые системы..................................... 783
12.4.3. Цветовая модель HLS......................................................... 785
12.5. Квантование цвета................................................................. 787
12.5.1. Квантование с постоянным шагом................................................ 789
12.5.2. Алгоритм популярности....................................................... 791
12.5.3. Алгоритм медианного сечения.................................................. 791
12.5.4. Octree-квантование.......................................................... 792
12.6. Резюме......................................................................... 795
12.7. Тематические задания.............................................................. 795
Тематическое задание 12.1. Рисование CIE-диаграммы...................................... 795
Тематическое задание 12.2. Рисование RGB-прсстранства................................... 795
Тематическое задание 12.3. Из HSV в RGB............................................... 796
Тематическое задание 12.4. Однородное квантование цвета.................................. 796
Тематическое задание 12.5. Квантование цвета по популярности.............................. 796
Тематическое задание 12.6. Квантование цвета методом медианного сечения.................... 796
Тематическое задание 12.7. Квантование цвета методом октодерева ........................... 796
12.8. Дополнительная литература.......................................................... 798
Глава 13. Удаление невидимых поверхностей..........................799
13.1. Введение........................................................................ 800
13.1.1. Два подхода: «точность по объекту» и «точность по изображению»...................... 802
13.1.2. Описание данных для полигональных сеток........................................ 802
13.2. Снова об алгоритме буфера глубины................................................... 805
13.3. HSR-методы со списками приоритетов.................................................. 806
13.3.1. Алгоритм беспечного художника ................................................ 807
13.3.2. HSR с использованием деревьев двоичного разбиения пространства...................... 808
13.3.3. Алгоритм сортировки по глубине................................................ 812
13.4. HSR-метод построчного сканирования.................................................. 816
13.5. Методы разбиения области .......................................................... 818
13.5.1. Квадрантное разбиение....................................................... 819
13.5.2. Другие определения простой области............................................. 822
13.6. О методах удаления невидимых линий.................................................. 825
13.6.1. Геометрическое тестирование в подпрограмме edgeTest().............................. 828
13.7. HSR-методы для криволинейных поверхностей............................................ 829
13.8. Резюме......................................................................... 832
13.9. Тематические задания.............................................................. 834
Тематическое задание 13.1. Проверка алгоритма художника................................. 834
Тематическое задание 13.2. Тест и разбиение............................................ 834
Тематическое задание 13.3. Удаление невидимых поверхностей с использованием BSP-деревьев...... 835
Тематическое задание 13.4. HSR с использованием сортировки по глубине....................... 836
Тематическое задание 13.5. Использование HSR-метода построчного сканирования........... 836
Тематическое задание 13.6. Рисование при помощи алгоритма Варнока......................... 837
Тематическое задание 13.7. HLR с помощью алгоритма стека ребер............................ 837
13.10. Дополнительная литература......................................................... 837
Глава 14. Введение в трассировку лучей...............................838
14.1. Введение........................................................................ 839
14.2. Построение геометрии трассировки лучей............................................... 840
14.3. Обзор процесса трассировки луча ..................................................... 842
14.4. Пересечение луча с объектом......................................................... 844
14.4.1. Пересечение луча с базовой плоскостью........................................... 845
14.4.2. Пересечение с базовой сферой.................................................. 845
14.4.3. Пересечение луча с преобразованными объектами................................... 846
14.5. Организация трассировщика луча в приложении.......................................... 848
14.5.1. Подпрограмма для вычисления пересечений луча со сферой............................ 855
14.5.2. Полный трассировщик лучей для сцен с излучающей сферой........................... 857
14.6. Пересечение лучей с другими примитивами.............................................. 858
14.6.1. Пересечение с квадратом...................................................... 858
14.6.2. Пересечение с коническим цилиндром............................................ 860
14.6.3. Пересечение с кубом (или с любым другим выпуклым полиэдром)........................ 864
14.6.4. Добавление новых примитивов.................................................. 871
14.7. Рисование закрашенных изображений сцен .............................................. 872
14.7.1. Нахождение нормали в точке соударения.......................................... 873
14.7.2. Раскраска объектов в соответствии с материалами поверхностей......................... 874
14.7.3. Физически обоснованные модели закраски: закрашивание Кука—Торренса................. 877
14.8. Наложение текстуры на поверхности................................................... 883
14.8.1. Текстура твердого тела........................................................ 884
14.8.2. Наложение изображений на поверхности.......................................... 894
14.8.3. Сглаживающая трассировка лучей............................................... 896
14.9. Использование экстентов............................................................ 897
14.9.1. Боксы и сферические экстенты.................................................. 899
14.9.2. Использование проекционных экстентов........................................... 904
14.10. Добавление теней для большей реалистичности........................................... 907
14.11. Отражения и прозрачность.......................................................... 910
14.11.1. Преломление света.......................................................... 913
14.11.2. Обработка преломления методом shade()......................................... 918
14.12. Составные объекты: логические операции с объектами...................................... 921
14.12.1. Трассировка лучей для CSG-объектов............................................ 922
14.12.2. Структура данных для Булевых объектов.......................................... 924
14.12.3. Пересечения лучей с Булевыми объектами........................................ 927
14.12.4. Построение и использование экстентов для CGG-объектов............................. 933
14.13. Резюме......................................................................... 935
14.14. Тематические задания.............................................................. 936
Тематическое задание 14.1. Эмиссионный трассировщик................................... 936
Тематическое задание 14.2. Усовершенствованный трассировщик лучей........................ 936
Тематическое задание 14.3. Реализация теней при трассировке лучей ......................... 937
Тематическое задание 14.4. Использование экстентов для ускорения трассировки лучей............ 937
Тематическое задание 14.5. Трассировка лучей с 3D-текстурами.............................. 937
Тематическое задание 14.6. Сглаживание............................................... 937
Тематическое задание 14.7. Трассировка лучей для других примитивов........................ 937
Тематическое задание 14.8. Двумерный трассировщик лучей для работы с преломлением...938
Тематическое задание 14.9. Отраженный и преломленный свет.............................. 938
Тематическое задание 14.10. Трассировка Булевых комбинаций объектов........................ 938
14.15. Дополнительная литература ......................................................... 938
Приложение А. Графический инструментарий: получение OpenGL.........939
А1. Получение и инсталляция OpenGL ...................................................... 939
Приложение Б. Немного математики для компьютерной графики.........941
Б1. Некоторые основные определения, относящиеся к матрицам и операциям над ними.... 941
Б1.1. Действия с матрицами ......................................................... 942
Б1.2. Умножение двух матриц........................................................ 943
Б1.3. Разбиение матрицы на блоки .................................................... 944
Б1.4. Определитель матрицы......................................................... 945
Б1.5. Обращение матрицы........................................................... 946
Б2. Некоторые свойства векторов и операции над ними......................................... 948
Б2.1. Перп вектора; перп-скалярное произведение......................................... 948
Б2.2. Смешанное произведение..................................................... 949
Б2.3. Двойное векторное произведение................................................. 950
Б3. Арифметика комплексных чисел........................................................ 950
Б4. Сферические координаты и направляющие косинусы........................................ 953
Приложение В. Некоторые полезные классы и служебные подпрограммы ... 956
B1. Классы для двумерной графики........................................................ 957
B2. RGBPixmap CLASS................................................................... 961
B3. Класс SCENE и сопутствующие классы.................................................... 966
B4. Класс NOISE....................................................................... 995
B5. Некоторые классы, полезные при трассировке лучей......................................... 998
Приложение Г. Введение в PostScript®................................ 1001
Г1. О языке PostScript.................................................................. 1002
Г1.1. Некоторые предварительные замечания........................................... 1002
Г1.2. PostScript основан на стеке..................................................... 1003
Г1.3. Некоторые операции со стеком: pop, dup, exch, clear.................................. 1004
Г1.4. Более сложные операторы работы со стеком........................................ 1005
Г1.5. Некоторые арифметические операторы............................................ 1005
Г2. Графические операторы в PostScript.................................................... 1008
Г2.1. Системы координат и преобразования............................................. 1008
Г2.2. Команды создания контура..................................................... 1009
Г2.3. Дуги окружностей............................................................ 1010
Г2.4. Использование операторов закрашивания.......................................... 1011
Г2.5. Преобразования координат..................................................... 1012
Г2.6. Операторы графического состояния.............................................. 1016
Г3. Рисование текста в PostScript......................................................... 1019
Г4. Определение новых переменных и процедур.............................................. 1019
Г4.1. Определение переменных...................................................... 1020
Г4.2. Определение процедур........................................................ 1020
Г4.3. Простейшая форма итерации с использованием оператора repeat......................... 1024
Г5. Команды решений и итераций......................................................... 1026
Г5.1. Команды, принимающие логические величины в качестве аргументов..................... 1027
Г5.2. Принятие решений........................................................... 1027
Г5.3. Итерация.................................................................. 1029
Гб. Печать численных значений.......................................................... 1034
Г7. Рисование полутоновых изображений................................................... 1035
Приложение Д. Введение в SDL...................................... 1038
Д1. Синтаксис SDL.................................................................... 1039
Д2. Макросы в SDL.................................................................... 1043
Д3. Расширение SDL................................................................... 1044
Литература....................................................... 1046
Список терминов..................................................1058
Алфавитный указатель............................................. 1065
Френсис Хилл "OpenGL ПРОГРАММИРОВАНИЕ КОМПЬЮТЕРНОЙ ГРАФИКИ" 2002 г.