This is an old revision of the document!


Laboratorul 4

Animații prin transormări spațiale de imagini

Animația prin transformări spațiale de imagini calculează o secvență de imagini care redau transformarea treptată a imaginii sursă în imaginea destinație. Fiecare imagine este un cadrul al filmului animației.

Concepte teoretice

Generarea unei imagini intermediare presupune:

  1. Transformare spațială: maparea pixelilor din imaginea sursă în imaginea intermediară
  2. Transformare de culoare: calculul culorii fiecărui pixel din imaginea intermediară, prin amestecul culorilor din imaginea sursă și din cea destinație

Transformarea folosind o rețea de triunghiuri

Intrarea algoritmului:

  • imaginea sursă și imaginea destinație
  • 2 seturi de puncte de control care formează 2 rețele de triunghiuri
    • pozițiile punctelor de control în cele 2 imagini
    • corespondența punctelor în imaginea sursă și imaginea destinație
    • în cadrul laboratorului - dam ca intrare și corespondența între triunghiurile dintre cele două rețele
  • numărul de imagini de generat

Pașii algoritmului

  1. Pentru fiecare imagine intermediară
    1. se determină o rețea de triunghiuri, ale cărei vârfuri se obțin prin interpolarea liniară între vârfurile rețelelor din imaginea sursă și imaginea destinație
    2. pentru fiecare triunghi al imaginii intermediare
      1. se calculează culorile vârfurilor triunghiului prin interpolare liniară între culorile vârfurilor corespondente din imaginea sursă și cea destinație
      2. se determină adresele pixelilor interiori triunghiului (rasterizare triunghi)
      3. pentru fiecare pixel interior
        1. se determină adresele pixelilor corespunzători din imaginea sursă, $P_s$, și cea destinație, $P_d$, folosind coordonatele baricentrice ale lui $P_i$.
        2. se calculează culoarea pixelului $P_i$ prin interpolare liniară între culorile pixelilor $P_s$ și $P_d$

Calculul coordonatelor baricentrice ale unui pixel, $P_i$:

  • $V_0$, $V_1$, $V_2$ formează un contur orientat trigonometric
  • $V_0$ e vârful de $y$ minim, $V_2$ e vârful de $y$ maxim
  • Coordonatele baricentrice ale lui $P_i$

Calculul adresei unui pixel folosind coordonatele baricentrice:

  • Se calculează adresele pixelilor $P_s$ și $P_d$ care au aceleași coordonate baricentrice în triunghiurile corespondente din imaginea sursă și cea destinație:

$P_s = u \cdot V_{s_0} + v \cdot V_{s_1} + w \cdot V_{s_2} + 0.5$

$P_d = u \cdot V_{d_0} + v \cdot V_{d_1} + w \cdot V_{d_2} + 0.5$

Implementare

Atribute

  • texturile 2D pentru imaginea sursă, imaginea destinație și imaginea intermediară
    Texture2D* sourceImage, * destImage, * interImage;
  • suprafețele triunghiulare ce reprezintă rețelele de triunghiuri în cele 3 imaigni
    Mesh* sourceNet, * destNet, * interNet; 
  • numărul de interații
    int iterations;
    int counter;
  • numărul imaginii intermediare curente
    int counter;

Metode

Metoda care creează un quad mare cât NDC

  • Mesh* lab4::createQuad(const char *name) 
  • în Update() se vor desena 3 astfel de quad-uri, fiecare pe o treime din viewport
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