Vežbe
Osnovna literatura
Osnovni izvor za učenje računarske grafike je knjiga Learn OpenGL sa pratećim primerima sa časova vežbi.
- Knjiga Web
- Knjiga PDF
- Primeri sa časa
- Snimci vežbi
- Prezentacije
- C++ primeri
- C++ mini kurs
- Zadaci za vežbu
- Prazan skelet za vežbanje primera
Dokumentacija
Alati
Dodatna (neobavezna) literatura
Kako da faktorišem projekat u kohezivne i logične module koje je lako razumeti i modifikovati?
- A Philosophy of Software Design
- C++ Primer, 5th edition
- Game Engine Architecture - Jason Gregory
- Game Programming Patterns - Robert Nystrom
Kako da renderujem fotorealistične scene?
- Physically Based Rendering: From Theory to Implementation 3rd Edition
- Raytracing in One Weekend
- Real Time Rendering
Kako da naučim osnove matematike računarske grafike?
Algoritam za učenje računarske grafike
setup_env()
examples, book = download()
knowledge = set()
project = set()
def experiment(example):
for e in choose(range(0, 10)):
example_modifed = modify(knowledge, example)
Y_guessed = guess_output(knowledge, example_modifed)
Y_real = run(example_modifed)
knowledge |= learn(knowledge, Y_guessed, Y_real, book, example)
def practice(example):
while True:
scratch = template(example)
knowledge |= read(knowledge, materials)
knowledge |= try_implement(knowledge, scratch, example, 30min)
if run(scratch) == run(example):
return
for week in range(0, 13):
knowledge |= read(knowledge, book, week)
knowledge |= lectures(knowledge, week)
for example in examples(week):
experiment(example)
practice(example)
for task in project_tasks(0, week):
knowledge |= try_implement(knowledge, project, task)
if used_gpt():
knowledge = set()
if not project.contains(project_tasks(week)):
knowledge |= ask_for_help(project, project_tasks(week), knowledge)
take_break_and_rest()
points = submit(project)
grade = exam(knowledge, project)
assert points == 25
assert grade == 10
Osnove računarske grafike
01 Uvod u interaktivnu računarsku grafiku
Lekcije:
Primeri:
Snimci:
Glavni koncepti:
- Interaktivna računarska grafika
- OpenGL
- GLFW
- GLAD
- Petlja renderovanja
- Događaji
02 Grafička protočna obrada
Lekcije:
Primeri:
- hello_triangle
- hello_triangle_extra_attrib
- hello_triangle_indexed
- hello_triangle_index_extra_attrib
- hello_tirangle_glcall_error
Snimci:
- Hello Triangle
- Hello Triangle - VBO, VAO
- Hello Triangle - Shader
- [Hello Triangle - EBO](https://www.youtube.com/watch?v=7aUZexYV_cY&list=PLD-fbfqEboxyzhQpaa_5SoNwKIOXoY5uj&index=12
- Hello Triangle - Indexed
- Debugging
Glavni koncepti:
- Grafička protočna obrada
- Šejderi
- Vertex Array Object
- Vertex Buffer Object
- Element Buffer Object
03 Šejderi i Teksture
Lekcije:
Primeri:
- Shaders - Uniform
- Shaders - Interpolation
- Shaders - Class
- Textures
- Textures - Combined
- Textures - Attribs
Glavni koncepti:
- Programiranje GPU - Šejderi
- Vertex i Fragment šejder
- Fragment interpolacija
- Mapiranje tekstura
- Mipmaps
04 Koordinatni sistemi i Kamera
Lekcije:
- Transformations video
- Coordinate systems video
- Camera: pozicija, pogled, opseg video intro
Primeri:
Glavni koncepti:
- Matrične operacije: translacija, skaliranje, rotacija
- Transformacije: Model -> View -> Projection -> NDC -> Screen
- Koordinatni sistemi: Local -> World -> View -> Clip -> Screen
- Kamera
05 Kamera - kretanje
Lekcije:
Primeri:
Glavni koncepti:
- Koordinatni sistem kamere
- LookAt matrica
- Vektori kamere
- Kretanje kamere
- Uglovi rotacije kamere
Kraj gradiva za I kolokvijum
06 Osvetljenje - Fongov model
Lekcije:
Primeri:
- Colors
- Diffuse lighting
- Specular lighting
- Materials
- Lighting maps - Specular
- Lighting maps - Diffuse
Glavni koncepti:
- Fongov model osvetljenja: ambient + diffuse + specular
- Materijali
- Lighting maps - tekstura osvetljenja
07 Tipovi izvora svetlosti
Lekcije:
- Light casters: direkciono, tačkasto, koncentrisano video
- Multiple lights: direkciono, tačkasto video
- Rekaputilacija svetlosti
Primeri:
- Light casters - Directional
- Light casters - Point
- Light casters - Spot
- Light casters - Soft Spot
- Multiple lights
Glavni koncepti:
- Tipovi izvora svetlosti: direkciono (directional), tačkasto (point), usmereno (spot)
- Scene sa više svetala
08 OpenGL - Napredni koncepti
Lekcije:
- Depth testing: Bafer dubine, funkcija testiranja dubine, preciznost vrednosti dubine, vizuelizacija bafera dubine, z-bafer, z-value math video
- Blending: providnost, odbacivanje fragmenata, utapanje, prikaz polu-providnih tekstura video
- Face culling: winding number, odsecanja video
- Cubemaps: kreiranje, skybox, mapiranje okruženja, dinamične mape okruženja video video
- Advanced Lighting: Blinn-Phong video
- Advanced Data: vertex atributi, baferi video
- Advanced GLSL: GLSL promenljive, interfejsi blokovi, uniform bafer objekti video
Primeri:
- Depth Testing
- Depth Testing View
- Blending - Discard
- Blending - Sort
- Face Culling
- Face Culling Cubes
- Cubemaps - skybox
- GLSL - Interface blocks
- GLSL - Uniform Buffer Objects
Glavni koncepti:
- Nelinearnost funkcije dubine fragmenata
- Providnost objekata
- Odsecanje stranica
- 3D teksture - Cubemaps
- GLSL UBO - Uniform Buffer Objects
- GLSL Direct State Access (DSA)
09
Lekcije:
- Assimp: instalacija i korišćenje biblioteke video
- Mesh: modeli i optimizacije video
- Modeli: formati i učitavanje modela video
- Model and Lighting: Model i osvetljenje video
- ImGui: GUI biblioteka video video
- Blender: kako konvertovati bilo koji model u Blenderu tako da radi sa trenutnom implementacijom učitavanja modela
Primeri:
Glavni koncepti:
- Formati modela
- Assimp
- Mesh
- Model
10
Lekcije:
Primeri:
Glavni koncepti:
- Framebaferi
- Renderovanje u teksturu
- Renderbaferi
- Post-processing
Kraj gradiva za II kolokvijum
Napredni efekti računarske grafike
-Bloom <- HDR <- Framebuffers: ekstrakovanje blještavih boja, Gausov blur, blending video
-Point shadows <- Shadow Mapping <- Framebuffers: omnidirekcione mape senki, PCF video
-Deffered Shading <- Framebuffers: G-bafer
Dodatno
-Instancing: primer (polje asterioda) video
-Geometry Shader: korišćenje, eksplodirajući objekti video
-Advanced Lighting: Blinn-Phong video
-Gamma Correction: sRGB teksture video
-Stencil testing: odbacivanje fragmenata, stencil funkcije, ivičenje objekata video
-Anti Aliasing -> Framebuffers: multisampling, MSAA, Off-screen MSAA video
-Text Rendering: prikazivanje teksta
-Parallax Mapping -> Normal mapping: paralaks mapiranje, koso paralaks mapiranje, paralaks absorbovanje video
-Shadow mapping: mapa senki, mapa dubine, renderovanje senki, PCF video
-Normal mapping: mapiranje normala, tangenti prostori, kompleksni objekti video
-HDR: Floating point buffers, Tone mapping, Exposure video
Licenca
Materijali kursa su bazirani na www.learnopengl.com sajtu napravljenom od strane Joey De Vries i kao takvi spadaju pod CC BY-NC 4.0 licencu. Celokupan tekst licence možete pronaći ovde.
Examples used in this course are based on www.learnopengl.com tutorials by Joey De Vries and as such are licensed under CC BY-NC 4.0. Full text of the licence can be found here.