Об этом проекте

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 — отдельный проект с собственными условиями.