Projekat
Projekat neobavezan deo kursa koji nosi ukupno 20 (+10 bonus) bodova. Projekat se smatra položenim ako je ocenjen sa barem 10 bodova i radi se individualno.
Nesamostalan rad na projektu, plagiranje, kao i direktno preuzimanje delova koda iz drugih studentskih projekata smatra se kršenjem pravila polaganja ispita prema pravilniku fakulteta i povlači automatsko pokretanje disciplinskog postupka i zabranu polaganja ispita Računarske grafike u trenutnoj školskoj godini.
Molimo Vas, detaljno pročitajte i ispratite uputstva u daljem tekstu.
Projekti koji odstupaju od šablona datog u uputstvu neće biti pregledani.
Ukoliko budete imali poteškoća u bilo kom koraku slobodno se javite mejlom.
Sav koda iz repozitorijuma sa primerima sa časa možete slobodno koristiti u projektu bez ikakvih restrikcija i navođenja.
Korišćenje razvojnog okruženja (CLion, QTCreator…) nije obavezno, ali može olakšati rad na projektu.
Kako da započnem projekat?
- Napraviti nalog na platformi Github i dodajte SSH ključ (Uputstva -> Github)
- Forkovati skelet projekta (Dugme
Forkna stranici) - Na forkovanom projektu promeniti naziv u podešavanjima (
Settings->Repository name) - Klonirati projekat na svoj računar:
git clone --recursive git@github.com:{USER_NAME}/{REPOSITORY_NAME}.git(link preuzeti preko zelenog dugmetaClonena stranici forkovanog projekta) cd {REPOSITORY_NAME}- Pokrenuti
./setup.shza instalaciju potrebnih biblioteka - Pokrenuti
doxygen Doxyfileza generisanje dokumentacije - Napraviti granu sa vašim brojem indeksa:
git checkout -b {miXXXXX}. - Pokrenuti CLion i otvoriti projekat:
File->Open->path/to/{REPOSITORY_NAME}
Praviti male, logične promene u kodu i redovno komitovati sa porukama koje sažeto opisuju dodatu promenu. Izbegavati dodavanje velike količine koda od jednom.
Dokumentaciji se može pristupiti lokalno otvaranjem: path/to/{REPOSITORY_NAME}/engine/docs/html/index.html u veb pretraživaču ili preko stranice kursa https://matf-racunarska-grafika.github.io/matf-rg-project-2024/.
Stil pisanja koda koji projekat treba da prati nalazi se u README.md dokumentu kloniranog repozitorijuma.
Pre svakog pokretanja procesa prevođenja projekta, pokreće se skripta koja verifikuje da je kod napisan prema pravilima u dokumentu README.md. Eventualne greške kao i smernice za ispravljanje grešaka biće ispisani u CMake podprozoru okruženja CLion (jedan od podprozora koji se može uključiti pritiskom na CMake dugme u donjem levom uglu okruženja CLion).
CLion podešavanja
- Učitati stil formatiranja koda:
Settings->Editor->Code Style->Schema (Wheel icon)->Import scheema->path/to/{REPOSITORY_NAME}/clion-code-style.xml - Uključiti automatsko formatiranje koda:
Settings->Tools->Actions on Save->Reformat code - Uključiti izuzetke za formatiranje koda:
Settings->Tools->Editor->Code Style-> CheckTurn formatter on/off with markers in code comments->Off: @formatter:off,On: @formatter:on - [Opciono] Instalirati dodatak GLSL za bojenje sintakse:
Settings->Plugins->Marketplace-> searchGLSL->Install. - [Opciono] Instalirati dodatak GitToolBox za bolju git integraciju:
Settings->Plugins->Marketplace-> searchGitToolBox->Install.
Sadržaj projekta
Osnova
- Model osvetljen sa barem dva tipa svetlosti (
Directional|Point|Spot) - Osvetljenje koje može da se podešava preko grafičkog korisničkog interfejsa ili tastature/miša
- Implementiran niz događaja:
{ACTION_X} --- AFTER_M_SECONDS---Triggers---> {EVENT_A} ---> AFTER_N_SECONDS---Triggers---> {EVENT_B}- ACTION - pritisak dugmenta, pomeranje na neku lokaciju na sceni, određen trenutak u vremenu…
- AFTER_X_SECONDS - nakon što protekne X sekundi od registrovane akcije
- EVENT - nešto se pomeri na sceni, boja svetla se promeni, neki objekat nestane, neki objekat se pojavi…
Jedna lekcija iz grupe A:
Jedna lekcija iz grupe B:
Lekcije grupe A i B implementiraju se kao komponente modula engine koje bi svaka instanca aplikacije mogla da koristi, na sličan način kako je implementirana
lekcija skybox. Lekcije grupe A i grupe B koje nisu implementirane kao komponenta modula engine neće biti bodovane.
Obratiti pažnju na svrhu i primenu lekcija iz grupe A i grupe B. Implementirane lekcije koje se na sceni ne primećuju neće biti bodovane. Primer:
- Bloom efekat bez tačkastog izvora svetlosti predstavljenog nekim objektom iz kojeg se svetlo
preliva - Parallax Mapping bez teksture sa dubinom i normalama
- Deffered Shading sa malim brojem izvora svetlosti
- …
[Bonus (+10 bodova)] Dodatna engine funkcionalnost i lekcija (10 bodova)
- Ako je projekat ocenjen sa maksimalnih 20 bodova, možete se javiti mejlom za dodatnu oblast za bonus 10 bodova.
- Dodatna oblast i
enginefunkcionalnost bira se u dogovoru sa studentom i u skladu sa temom projekta. - Svaki student koji se prijavi za bonus će dobiti jedinstvenu
enginefunkcionalnost za trenutnu školsku godinu. - Rok za završetak bonus oblasti je 30 dana od trenutka dobijanja opisa.
U projektu se takođe boduje:
- Stil, kreativnost i skladnost scene.
- Uočljivost, izraženost i doprinos implementiranih oblasti atmosferi scene.
- Kvalitet koda
- Konzistentno formatiranje prema
clion-code-style.xml(pogledati kodengineitest::appza primere) - Modularnost i logična podeljenost koda na
app/enginedelove (pogledatiskyboxprimer uengine/test/app) - Čitljiva i razumljiva imena klasa, funkcija, promenljivih
- Konzistentno formatiranje prema
Projekat neće biti pregledan ako:
- Ne postoji istorija pojedinačnih komitova projekta (na primer ceo projekat postavljen jednim komitom)
- Scena sadrži modele i teksture iz repozitorijuma sa primerima sa časa
- Projekat nije napravljen kao fork skeleta projekta iz uputstva
- Projekat se ne kompilira, ne pokreće, iznenadno se zaustavlja (segfault, exception…)
- Nema popunjen
PROJECT-DESCRIPTION-TEMPLATE.md
Kako da koristim Git i Github?
Napraviti baznu granu za projekat prema upustvu: [Kako da započnem projekat?].
Za svaku lekciju od grane {miXXXXX} napraviti odvojenu granu {lesson-name-implemntation} i promene postavljati na toj grani kako bi pregledanje, poređenje i testiranje bilo lakše.
Kada je lekcija implementirana, granu sa lekcijom {lesson-name-implemntation} spojiti sa granom {miXXXXX}.
Kompletan primer rada na implementaciji osvetljenja:
# Napraviti granu
git checkout -b miXXXXX
# ... dodati osnovne, zatim za svaku funkcionalnost projekta napraviti granu
git checkout -b lighting-implementation
# ... implementirati svetlo
git add Lighting.cpp light.glsl
git commit -m 'Implemented basic Point light.'
# ... podesiti svetlo
git add Lighting.cpp light.glsl MainController.cpp
git commit -m 'Fine tune Point light.'
# if (implementacija svetla završena) {
git checkout miXXXXX
git merge lighting-implementation
# } else if (implementacija svetla ima problem) {
git push -u origin HEAD
# Pogledati upustvo [Implementation] ispod
# }
[Implementation] Imam problem/poteškoću prilikom implementacije lekcije koju ne mogu da rešim?
Obavezno ispratiti upustvo iznad: [## Kako da efektivno koristim Git i Github?]. Implementacije lekcija držati u odvojenim granama.
- Barem 1-2 sata probajte sami da rešite problem
- Probajte da vratite projekat u poslednje stanje u kojem je sve radilo pa inkrementalno dodajte promene jednu po jednu, testirajući dodati kod:
git stashzatimgit checkout ..git stashće sačuvati sve trenutne promene, možete ih vratiti sagit stash pop.
Ako ništa od toga ne uspe:
- U podešavanjima sa GitHub stranice Vašeg projekta dodati korisničko ime:
@spaske00uContributors: :Settings->Collaborators and teams->Add peopletype@spaske00. Zarolestavitiwrite. - Komitovati promene i postaviti granu na GitHub:
git push -u origin {lesson-name-implementation} - Napravite Pull Request sa stranice Vašeg projekta:
Pull Requests->New pull request->basepostaviti{YOUR_REPOSITORY_NAME}:miXXXXX, zacompareodabrati{YOUR_REPOSITORY_NAME}:{lesson-name-implementation}->Create pull request - U opisu ostaviti pitanja
- Sidebar desno
Reviewers->wheel icon->add @spaske00. - Poslati mejl sa naslovom:
[RG][Implementation]i u sadržaju ostaviti samo link do pull requesta:https://github.com/{YOUR_USER_NAME}/{YOUR_REPOSITORY_NAME}/pulls/{NUMBER}.
To: {asistent} _At__ @math.rs
Subject: [RG][Implementation]
Content:
https://github.com/{YOUR_USER_NAME}/{YOUR_REPOSITORY_NAME}/pulls/{NUMBER}
[Question] Imam opšte pitanje u vezi projekta/lekcije?
Ukoliko imate opšte pitanje u vezi lekcije ili projekta, koje nema prateći kod, prvo barem 1-2 sata probajte sami da pronađete odgovor u materijalima kursa.
Ako ne uspete:
- Uključiti opciju Issues: Settings -> Features -> Enable Issues
- Na stranici Vašeg repozitorijuma napraviti novi issue:
https://github.com:{YOUR_USER_NAME}/{YOUR_REPOSITORY_NAME}/issues - Naslov [Issue] postavite da bude tekst pitanja
- U opisu [Issue] opisati koje ste materijale pogledali i eventualno detaljnije pojasnite pitanje.
- U opisu problema tagovati korisničko ime:
@spaske00.
Jedan [Issue] treba sadržati tačno jedno pitanje, ukoliko imate više pitanja, slobodno napravite više [Issue] tiketa.
Komentari
Radi lakše organizacije i određivanja prioriteta rada na projektu, komentari koji budu ostavljeni na platformi Github mogu imati sledeće dve oznake:
- [CRITICAL] - Problemi koji moraju biti rešeni kako bi projekat imao prolazni broj bodova.
- [OPTIONAL] - Opciono ispravljanje i sugestije koje ne utiču na konačan broj bodova, ali mogu pomoći u istraživanju alternativnih rešenja i proširivanju znanja.
Svaki nerazrešen komentar, koji nije CRITICAL, nosi negativne bodove u konačnom zbiru bodova na projektu.
Ako kod ispravljen predlogom iz komentar, u odgovoru na komentar ostaviti kratak opis promene.
Ako niste sigurni kako da implementirate predlog, odgovoriti na komentar pitanjem za dodatno pojašnjenje.
Ako predlog nije implementiran, ne razrešavati komentar dok ne bude obrađen radi lakšeg praćenja izmena.
Prijava i ocenjivanje projekata
Koraci za prijavu projekta:
- U podešavanjima dodati korisničko ime:
@spaske00uContributors: sa stranice Vašeg projekta:Settings->Collaborators and teams->Add peopletype@spaske00. Zarolestavitiwrite. - Postaviti granu na Github:
git push -u origin {miXXXXX} - Napraviti Pull Request sa stranice projekta:
Pull Requests->New pull request->baseostaviti{YOUR_REPOSITORY_NAME}:main, zacompareodabrati{YOUR_REPOSITORY_NAME}:{miXXXXX}->Create pull request. (Obratiti pažnju da umesto {YOUR_REPOSITORY_NAME} Github ponekad ostavimatf-rg-project-2024, zameniti sa granom main na Vašem repozitorijumu) - Sidebar desno
Reviewers->wheel icon->add @spaske00. - Prijaviti projekat popunjavanjem formulara.
Projekat će biti pregledan, po potrebi zakazana odbrana, i bodovi objavljeni na stranici kursa.
Student može biti pozvan na usmenu odbranu projekta. Usmena odbrana projekta se sastoji od:
- Opštih pitanja iz lekcija sa vežbi
- Opštih pitanja samo iz implementiranih lekcija iz grupe A i grupe B
- Opštih pitanja o konkretnoj implementaciji i razumevanju samog projekta
- Na odbrani projekta se očekuje duboko razumevanje implementiranih oblasti i interakcije sa ostatkom projekta – ukoliko ne možete objasniti kod i lekciju koji ste dodali, ta oblast se ocenjuje sa nula bodova.
Važno: Konsultacije, Question, i Issue projekata se ne održavaju od početka prijave projekata do dana ispitnog roka.
Da li mogu da uradim projekat nakon položenog teorijskog i praktičnog testa?
Ocena iz predmeta računarske grafike formira se kao zbir bodova na projektu, praktičnog i teorijskog testa. Ako želite da uradite projekat nakon položenog praktičnog i teorijskog testa potrebno je da nam odmah nakon objavljivanja rezultata ispitnog roka javite mejlom:
To: {profesorka} _At_ math.rs,
CC: {asistent} _at_ math.rs
Subject: [RG][Projekat]
Content:
Poštovana,
Želim da uradim projekat u nekom od narednih rokova.
S` poštovanjem,
{Ime} {Prezime}
{brINDEKSA}
Gde mogu pronaći modele za projekat?
Modele možete preuzeti sa:
Sinhronizacija forka projekta
Fork projekta je kopija originalnog projekta nastala od stanja originala u trenutku forkovanja i od tog trenutka promene na oba su međusobno nezavisne.
Ukoliko originalni projekta dobije nove komitove nakon trenutka forkovanja, fork projekta se može sinhronzivaoti sa originalnom na sledeći način:
cd my/project/directory
# Prebaciti se na main granu
git checkout main
# Dodati upstream originalnog projekta
git remote add upstream git@github.com:matf-racunarska-grafika/matf-rg-project-2024.git
# Preuzeti grane sa originalnog projekta
git fetch upstream
# Prebaciti sve nove kommitve sa main grane originala na lokalnu main granu
git rebase upstream/main
# Postaviti novu main granu na forkovan repozitorijum
git push origin main --force
# Sinhronizovati granu za rad sa glavnom granom
git checkout miGGXXXX && git rebase main