Об этом проекте
Graphics Foundations — это самостоятельный, построенный по темам учебный ресурс по основам компьютерной графики, покрывающий математику, конвейер рендеринга и алгоритмы, лежащие в основе изображений реального времени и трассировки лучей. Он вырос из шести четвертей занятий в рамках обсуждений для UCLA CS 174A (Introduction to Computer Graphics, 2019–2021) и был переписан как независимый ресурс; автор отмечает, что это не официальный учебный материал курса.
Структура и содержание
Материал организован как учебный путь из 13 глав (с номерами 0–12), которые предполагается читать по порядку. Каждая глава сообщает, чему вы научитесь, объясняет материал с помощью рисунков, даёт ссылку на демонстрацию и завершается вопросами для самопроверки со скрытыми ответами.
- Глава 0: настройка и JavaScript для графики (инструменты, модули, классы, замыкания, типизированные массивы, цикл кадров)
- Глава 1: конвейер рендеринга и GLSL (вершинные/фрагментные шейдеры, растеризация, пространство отсечения)
- Глава 2: точки, векторы и системы координат (аффинные пространства, однородные и барицентрические координаты, скалярное и векторное произведения)
- Глава 3: моделирование форм треугольниками (дискретизация, индексированные меши, полосы, порядок обхода вершин, плоские и гладкие нормали)
- Глава 4: преобразования (перенос, поворот, масштабирование, сдвиг, отражение; порядок; иерархии; анимация)
- Глава 5: смена базиса (реперы, преобразование координат, камера как репер)
- Глава 6: обзор и проекция (look-at, ортографическая и перспективная проекции, отсечение, z-буфер)
- Глава 7: освещение и затенение (Phong и Blinn–Phong, типы источников света, плоское/затенение Гуро/Phong, матрица нормалей)
- Глава 8: наложение текстур (uv-отображение, фильтрация, мипмапы, перспективно-корректная интерполяция, бамп/нормал/дисплейсмент)
- Глава 9: обнаружение столкновений (ограничивающие объёмы, теорема о разделяющей оси, широкий этап, шаг по времени)
- Глава 10: тени, зеркала и прозрачность (теневые карты, плоские зеркала, альфа-смешивание, предумноженная альфа)
- Глава 11: трассировка лучей (генерация лучей, пересечения, рекурсивные лучи, деревья лучей, ускорение)
- Глава 12: создание интерактивного графического проекта (планирование, тайминг и конечные автоматы, частицы, скайбоксы, выбор объектов, композиция, цвет)
К конспектам прилагаются два набора упражнений: Problems I (основы, преобразования, обзор) и Problems II (освещение, текстуры, столкновения, трассировка лучей), каждый с полными разобранными решениями. Предварительные требования — программирование на любом языке и линейная алгебра на уровне векторов, матриц, скалярного и векторного произведений; глава 0 охватывает необходимый JavaScript.
Демонстрации
Семь интерактивных браузерных демонстраций сопровождают главы и доступны по ссылкам с живого сайта GitHub Pages: hello triangle (обычный WebGL), преобразования, камера и проекция, освещение и затенение, наложение текстур, трассировка лучей и ограничивающие объёмы. Демонстрации 02–07 построены на TinyGraphics.js, небольшой обучающей библиотеке Гарретта Риджа, загружаемой из опубликованной копии, а не включаемой в проект. Демонстрации предназначены для настольного браузера с WebGL 2. Предоставляется скрипт локального сервера (node tools/serve.mjs) с возможностью разработки против локального клона TinyGraphics.js.
Структура репозитория и проверки качества
Репозиторий организован в каталоги notes/, exercises/, figures/ (SVG-рисунки, генерируемые tools/figures.py), demos/ (один HTML-файл на демонстрацию плюс общие вспомогательные модули) и tools/. Примечательно, что конспекты тестируются как код: скрипты пересчитывают каждое разобранное число в конспектах и упражнениях, проверяют ссылки, якоря, оригинальность рисунков и отсутствие организационной информации о курсе, загружают каждую демонстрацию в headless Chromium, нажимая каждый элемент управления и делая скриншоты, а также проверяют, как математика отображается на github.com. Скрипт fix_math.py переписывает конструкции LaTeX (такие как \mathbf, \boxed, \tag, \operatorname), которые некорректно отображаются как нативный MathML на GitHub. Проверка демонстраций требует локального Chromium с WebGL 2 и создаёт скриншоты для просмотра человеком.
Авторы и лицензия
Конспекты возникли как материалы для обсуждений по UCLA CS 174A для курсов, которые вели проф. Асиш Лоу и проф. Деметри Терзопулос; выбор тем и их порядок следуют этим курсам. Слайды лекций, материалы учебника и задания не включены. Оригинальные еженедельные материалы для обсуждений остаются доступными в архивном теге и в репозиториях по четвертям. Конспекты, упражнения, рисунки и демонстрации защищены авторским правом © Yunqi Guo и распространяются по лицензии CC BY-NC-ND 4.0: разрешено чтение, изучение и распространение неизменённых копий в некоммерческих целях с указанием авторства, тогда как распространение изменённых версий или коммерческое использование не допускается. TinyGraphics.js — отдельный проект с собственными условиями.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.