This shows you the differences between two versions of the page.
vdvac:lab4 [2024/04/10 13:46] anca.morar [Implementare] |
vdvac:lab4 [2024/04/10 14:21] (current) anca.morar [Bonusuri posibile] |
||
---|---|---|---|
Line 54: | Line 54: | ||
=== Atribute === | === Atribute === | ||
* texturile 2D pentru imaginea sursă, imaginea destinație și imaginea intermediară <code>Texture2D* sourceImage, * destImage, * interImage;</code> | * texturile 2D pentru imaginea sursă, imaginea destinație și imaginea intermediară <code>Texture2D* sourceImage, * destImage, * interImage;</code> | ||
- | * suprafețe triunghiulare ce reprezintă rețelele de triunghiuri în cele 3 imaigni <code>Mesh* sourceNet, * destNet, * interNet; </code> | + | * suprafețele triunghiulare ce reprezintă rețelele de triunghiuri în cele 3 imaigni <code>Mesh* sourceNet, * destNet, * interNet; </code> |
- | * numărul de interații <code> int iterations; | + | * numărul de interații <code>int iterations; |
int counter;</code> | int counter;</code> | ||
* numărul imaginii intermediare curente <code>int counter;</code> | * numărul imaginii intermediare curente <code>int counter;</code> | ||
+ | === Metode === | ||
+ | **Crearea unui quad mare cât NDC** | ||
+ | * <code>Mesh* createQuad(const char *name) </code> | ||
+ | * î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> |