Differences

This shows you the differences between two versions of the page.

Link to this comparison view

vdvac:lab4 [2024/04/10 13:51]
anca.morar [Implementare]
vdvac:lab4 [2024/04/10 14:21] (current)
anca.morar [Bonusuri posibile]
Line 60: Line 60:
  
 === Metode === === Metode ===
-**Metoda care creează un quad mare cât NDC** +**Crearea unui quad mare cât NDC** 
-  * <​code>​Mesh* ​lab4::createQuad(const char *name) </​code>​ +  * <​code>​Mesh* createQuad(const char *name) </​code>​ 
-  * în Update() se vor desena 3 astfel de quad-uri, fiecare pe o treime din viewport+  * în ''​Update()'' ​se vor desena 3 astfel de quad-uri, fiecare pe o treime din viewport
  
 +**Generarea rețelelor de triunghiuri din imaginile sursă și destinație**
 +  * <​code>​void createNet(const string &path, const char *fileName)</​code>​
 +  * se citesc din fișier perechile pe puncte de control din cele două rețele (cu care se completează vectorii ''​vertices''​)
 +  * se citesc indicii pentru triunghiurile formate (cu care se completează vectorul ''​indices''​)
 +
 +** Calculul coordonatelor baricentrice**
 +  * <​code>​bool Baricentric(glm::​vec2 pos, glm::vec2 v0, glm::vec2 v1, glm::vec2 v2, float &u, float &v, float &​w)</​code>​
 +  * intoarce true dacă poziția punctului e în interiorul triunghiului
 +  * calculează coordonatele baricentrice
 +
 +** Calculul imaginii intermediare **
 +  * <​code>​void ModifyImage(int crt_iteration,​ int iterations)</​code>​
 +  * calculează vârfurile rețelei intermediare prin interpolare
 +  * pentru fiecare pixel din imaginea intermediară
 +    * calculează triunghiul care îl conține
 +    * determină triunghiurile corespondente din imaginea sursă, respectiv din imaginea destinație
 +    * calculează coordonatele baricentrice
 +    * calculează pixelii corespondenți din imaginea sursă, respectiv din imaginea destinație
 +    * calculează culoarea pixelului curent prin interpolare între culorile pixelilor corespondenți din imaginea sursă, respectiv din imaginea destinație
 +
 +==== Cerințe laborator ====
 +  - Să se completeze funcția ''​Baricentric()''​ astfel încât să calculeze corect ariile din triunghi (aria totală și ariile parțiale determinate de punctul curent) și să se calculeze coordonatele baricentrice
 +  - Să se calculeze vârfurile rețelei intermediare prin interpolare,​ pentru imaginea intermediară curentă
 +  - Să se determine vârfurile triunghiului care conține pixelul curent
 +  - Să se calculeze vârfurile triunghiurilor corespondente triunghiului curent (din imaginea sursă și cea destinație)
 +  - Să se calculeze coordonatele punctelor corespondente punctului curent (din imaginea sursă și cea destinație) ​
 +  - Să se calculeze culoarea pixelului curent prin interpolare între culorile pixelilor corespondenți din imaginea sursă, respectiv din imaginea destinație
 +
 +==== Bonusuri posibile ====
 +  * Optimizarea procesării pixelilor
 +      * în loc de parcurgerea pixel cu pixel și căutarea triunghiului care conține pixelul curent, ar trebui realizată parcurgerea triunghi cu triunghi și rasterizara fiecărui triunghi
 +
 +==== Demo ====
 +
 +<​html>​
 +<p style="​text-align:​center;​margin:​auto;">​
 +<iframe width="​430"​ height="​250"​ src="​https://​www.youtube.com/​embed/​iVTRa3xTXXs"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe>​
 +</p>
 +</​html>​
vdvac/lab4.1712746295.txt.gz · Last modified: 2024/04/10 13:51 by anca.morar
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0