Differences

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

Link to this comparison view

vdvac:lab3 [2024/03/25 17:00]
anca.morar [Metode]
vdvac:lab3 [2024/03/25 17:45] (current)
anca.morar [Demo]
Line 12: Line 12:
   * Culorile fragmentelor rezultate din rasterizarea geometriei proxy sunt acumulate în buffer-ul imagine   * Culorile fragmentelor rezultate din rasterizarea geometriei proxy sunt acumulate în buffer-ul imagine
     * Culorile fragmentelor rezultate din rasterizarea unui poligon sunt calculate de hardware-ul plăcii grafice (interpolare biliniară)     * Culorile fragmentelor rezultate din rasterizarea unui poligon sunt calculate de hardware-ul plăcii grafice (interpolare biliniară)
-    * Compunerea culorilor: schema din spate în față, folosind formula $C_{dst} = C_{src} + C_{dst} (1 - A_{src})$+    * Compunerea culorilor: schema din spate în față, folosind formula $C_{dst} = C_{src} + C_{dst} (1 - A_{src})$ ​(se realizează printr-un mecanism de blending)
   * Cazurile ideale: când direcția de vizualizare e perpendiculară pe planele poligoanelor geometriei proxy   * Cazurile ideale: când direcția de vizualizare e perpendiculară pe planele poligoanelor geometriei proxy
     * În rest, se alege setul de poligoane care este "cel mai perpendicular"​ pe direcția de vizualizare     * În rest, se alege setul de poligoane care este "cel mai perpendicular"​ pe direcția de vizualizare
Line 47: Line 47:
 **Determinare stivă de poligoane redate** **Determinare stivă de poligoane redate**
  
-''​detMostPerpendicularAxis()''​ determină cea mai perpendiculară axă (''​Ox / Oy / Oz''​) pe planul de vizualizare,​ și partea (pozitivă / negativă) ​pe care se află observatorul ​+''​detMostPerpendicularAxis()''​ determină cea mai perpendiculară axă (''​Ox / Oy / Oz''​) pe planul de vizualizare,​ și partea (pozitivă / negativă) ​de care se află observatorul ​
   * Se calculează produsele scalare dintre vectorul de vizualizare și axele principale (''​Ox'',​ ''​Oy''​ și ''​Oz''​)   * Se calculează produsele scalare dintre vectorul de vizualizare și axele principale (''​Ox'',​ ''​Oy''​ și ''​Oz''​)
   * Se determină cel mai mare produs scalar în valoare absolută.  ​   * Se determină cel mai mare produs scalar în valoare absolută.  ​
Line 55: Line 55:
 **Desenare stivă poligoane** **Desenare stivă poligoane**
  
-''​DesenStivaAxaXNegativa()''​ desenează poligoanele de-a lungul axei Ox, de la cel mai îndepărtat de observator (care are coordonata ''​xPos = -1''​) până la cel mai apropiat (care are coordonata ''​xPos = 1''​) +''​DesenStivaAxaXNegativa()''​ desenează poligoanele de-a lungul axei ''​Ox''​, de la cel mai îndepărtat de observator (care are coordonata ''​xPos = -1''​) până la cel mai apropiat (care are coordonata ''​xPos = 1''​) 
-  * Se pornește cu o matrice de modelare care translatează pătratul din planul yOz la ''​xPos = -1'':​ <​code>​glm::​mat4 model_matrix_slice = glm::​translate(glm::​mat4(1),​ glm::​vec3(xPos,​ 0, 0));</​code>​ +  * Se pornește cu o matrice de modelare care translatează pătratul din planul ​''​yOz''​ într-un plan paralel cu acesta, dar care are coordonata ​''​xPos = -1'':​ <​code>​glm::​mat4 model_matrix_slice = glm::​translate(glm::​mat4(1),​ glm::​vec3(xPos,​ 0, 0));</​code>​ 
-  * Se setează ​mecanisum ​de blending: <​code>​glEnable(GL_BLEND);​+  * Se setează ​mecanismul ​de blending: <​code>​glEnable(GL_BLEND);​
 glBlendFunc(GL_ONE,​ GL_ONE_MINUS_SRC_ALPHA);</​code>​ glBlendFunc(GL_ONE,​ GL_ONE_MINUS_SRC_ALPHA);</​code>​
-    * Funcția aceasta stabilește mecanismul de amestec al culorii. Astfel ''​GL_ONE''​ este factorul cu care se înmulțește culoarea curentă (culoarea sursă) și ''​GL_ONE_MINUS_SRC_ALPHA''​ este factorul cu care se înmulțește acumulată (culoarea destinație).+    * Funcția aceasta stabilește mecanismul de amestec al culorii. Astfel ''​GL_ONE''​ este factorul cu care se înmulțește culoarea curentă (culoarea sursă) și ''​GL_ONE_MINUS_SRC_ALPHA''​ este factorul cu care se înmulțește ​culoarea ​acumulată (culoarea destinație).
     * Se respectă formula $C_{dst} = C_{src} + C_{dst} (1 - A_{src})$     * Se respectă formula $C_{dst} = C_{src} + C_{dst} (1 - A_{src})$
   * Se desenează atâtea pătrate cât este dimensiunea ''​xsize''​ a volumului   * Se desenează atâtea pătrate cât este dimensiunea ''​xsize''​ a volumului
-  * După fiecare desenare, se actualizează ''​xPos''​+  * După fiecare desenare, se actualizează ''​xPos'' ​(ca să ajungă de la -1 la 1)
   * ''​DesenStivaAxaXNegativa()''​ desenează poligoanele de-a lungul axei Ox, de la cel mai îndepărtat (care are coordonata ''​xPos = 1''​) până la cel mai apropiat (care are coordonata ''​xPos = -1''​). Analog pentru axele ''​Oy''​ și ''​Oz''​.   * ''​DesenStivaAxaXNegativa()''​ desenează poligoanele de-a lungul axei Ox, de la cel mai îndepărtat (care are coordonata ''​xPos = 1''​) până la cel mai apropiat (care are coordonata ''​xPos = -1''​). Analog pentru axele ''​Oy''​ și ''​Oz''​.
 +
 +==== Demo ====
 +
 +<​html>​
 +<p style="​text-align:​center;​margin:​auto;">​
 +<iframe width="​430"​ height="​250"​ src="​https://​www.youtube.com/​embed/​LiY6FlgQrew"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe>​
 +</p>
 +</​html>​
 +
vdvac/lab3.1711378820.txt.gz · Last modified: 2024/03/25 17:00 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