Sobre o projeto

Graphics Foundations é um recurso de aprendizado autossuficiente, tópico por tópico, para os fundamentos da computação gráfica, cobrindo a matemática, o pipeline de renderização e os algoritmos por trás de imagens em tempo real e traçadas por raios. Surgiu de seis trimestres de seções de discussão para o CS 174A da UCLA (Introdução à Computação Gráfica, 2019–2021) e foi reescrito como um recurso independente; o autor afirma que não é material oficial do curso. Estrutura e conteúdo O material está organizado como um percurso de aprendizado de 13 capítulos (numerados de 0 a 12), que devem ser lidos em ordem. Cada capítulo declara o que você aprenderá, explica com figuras, fornece links para uma demonstração e termina com perguntas de autocorreção e respostas ocultas. - Capítulo 0: configuração e JavaScript para gráficos (ferramentas, módulos, classes, closures, arrays tipados, o loop de quadros) - Capítulo 1: o pipeline de renderização e GLSL (shaders de vértice/fragmento, rasterização, espaço de recorte) - Capítulo 2: pontos, vetores e sistemas de coordenadas (espaços afins, coordenadas homogêneas e baricêntricas, produto escalar e vetorial) - Capítulo 3: modelagem de formas com triângulos (discretização, malhas indexadas, tiras, winding, normais planas vs. suaves) - Capítulo 4: transformações (translação, rotação, escala, cisalhamento, reflexão; ordem; hierarquias; animação) - Capítulo 5: mudança de base (frames, conversão de coordenadas, a câmera como um frame) - Capítulo 6: visualização e projeção (look-at, derivações ortográfica e em perspectiva, clipping, z-buffer) - Capítulo 7: iluminação e sombreamento (Phong e Blinn–Phong, tipos de luz, sombreamento flat/Gouraud/Phong, matriz normal) - Capítulo 8: mapeamento de texturas (mapeamento uv, filtragem, mipmaps, interpolação com correção de perspectiva, bump/normal/displacement) - Capítulo 9: detecção de colisão (volumes limitadores, teorema do eixo separador, fase ampla, passo de tempo) - Capítulo 10: sombras, espelhos e transparência (shadow mapping, espelhos planares, alpha blending, alfa pré-multiplicado) - Capítulo 11: ray tracing (geração de raios, interseções, raios recursivos, árvores de raios, aceleração) - Capítulo 12: construindo um projeto gráfico interativo (planejamento, temporização e máquinas de estado, partículas, skyboxes, picking, composição, cor) Dois conjuntos de exercícios acompanham as notas: Problems I (fundamentos, transformações, visualização) e Problems II (iluminação, texturas, colisões, ray tracing), cada um com soluções completas passo a passo. Os pré-requisitos são programação em qualquer linguagem e álgebra linear no nível de vetores, matrizes, produto escalar e vetorial; o Capítulo 0 cobre o JavaScript necessário. Demonstrações Sete demonstrações interativas no navegador acompanham os capítulos, com links a partir de um site GitHub Pages ativo: "hello triangle" (WebGL puro), transformações, câmera e projeção, iluminação e sombreamento, mapeamento de texturas, ray tracing e volumes limitadores. As demonstrações 02–07 são construídas sobre TinyGraphics.js, uma pequena biblioteca de ensino de Garett Ridge, carregada a partir de sua cópia publicada em vez de incluída localmente. As demonstrações são destinadas a um navegador desktop com WebGL 2. Um script de servidor local (node tools/serve.mjs) é fornecido, com uma opção para desenvolver contra um clone local de TinyGraphics.js. Organização do repositório e verificações de qualidade O repositório está organizado em notes/, exercises/, figures/ (figuras SVG geradas por tools/figures.py), demos/ (um arquivo HTML por demonstração mais helpers compartilhados) e tools/. Notavelmente, as notas são testadas como código: scripts recalculam cada número trabalhado nas notas e exercícios, verificam links, âncoras, originalidade das figuras e ausência de logística do curso, carregam cada demonstração em Chromium headless pressionando todos os controles e tirando capturas de tela, e auditam como a matemática é renderizada no github.com. Um script fix_math.py reescreve construções LaTeX (como \mathbf, \boxed, \tag, \operatorname) que são renderizadas incorretamente como MathML nativo no GitHub. A verificação das demonstrações requer um Chromium local com WebGL 2 e grava capturas de tela para revisão humana. Créditos e licenciamento As notas começaram como material de seção de discussão para o CS 174A da UCLA, apoiando cursos ministrados pelo Prof. Asish Law e pelo Prof. Demetri Terzopoulos; a escolha e a ordem dos tópicos seguem esses cursos. Slides de aula, figuras de livros-texto e tarefas não estão incluídos. Os materiais semanais originais de discussão permanecem disponíveis em uma tag de arquivo e em repositórios por trimestre. As notas, exercícios, figuras e demonstrações são © Yunqi Guo e licenciados sob CC BY-NC-ND 4.0: ler, estudar e compartilhar cópias não modificadas para fins não comerciais com crédito é permitido, enquanto distribuir versões modificadas ou uso comercial não é. TinyGraphics.js é um projeto separado com seus próprios termos.