Differences

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

Link to this comparison view

vdvac:lab1 [2024/03/06 09:31]
anca.morar [Cerinte laborator]
vdvac:lab1 [2024/03/07 08:52] (current)
anca.morar [Concepte teoretice]
Line 13: Line 13:
   * un cub cu vârfuri care au asociate valori scalare   * un cub cu vârfuri care au asociate valori scalare
 **Izosuprafața** - suprafața care are aceeași valoare scalară (izovaloare) în toate punctele sale **Izosuprafața** - suprafața care are aceeași valoare scalară (izovaloare) în toate punctele sale
 +
 **Izovaloarea** - o valoare care are o anumită semnificație în funcție de domeniu. Exemple: **Izovaloarea** - o valoare care are o anumită semnificație în funcție de domeniu. Exemple:
   * densitate (medicină)   * densitate (medicină)
Line 46: Line 47:
 ===== Implementare ===== ===== Implementare =====
  
-Framework-ul de laborator se poate descărca de aici.+Framework-ul de laborator se poate descărca de [[https://​graphics.cs.pub.ro/​~anca/​Vizualizare_volumetrica/​|aici]] sau de pe Moodle.
 ==== Atribute ==== ==== Atribute ====
  
Line 76: Line 77:
   * ''​grid.n[]''​ conțin normalele vârfurilor voxelului curent (calculate conform **Fig. 4**): de exemplu,   * ''​grid.n[]''​ conțin normalele vârfurilor voxelului curent (calculate conform **Fig. 4**): de exemplu,
 <​code>​ grid.n[0] = glm::​vec3(volumeData[z * xsize * ysize + y * xsize + (x+1)] - volumeData[z * xsize * ysize + y * xsize + (x-1)],​volumeData[z * xsize * ysize + (y+1) * xsize + x] - volumeData[z * xsize * ysize + (y-1) * xsize + x],​volumeData[(z+1) * xsize * ysize + y * xsize + x] - volumeData[(z-1) * xsize * ysize + y * xsize + x]); <​code>​ grid.n[0] = glm::​vec3(volumeData[z * xsize * ysize + y * xsize + (x+1)] - volumeData[z * xsize * ysize + y * xsize + (x-1)],​volumeData[z * xsize * ysize + (y+1) * xsize + x] - volumeData[z * xsize * ysize + (y-1) * xsize + x],​volumeData[(z+1) * xsize * ysize + y * xsize + x] - volumeData[(z-1) * xsize * ysize + y * xsize + x]);
- ​grid.n[1] = glm::​vec3(volumeData[z * xsize * ysize + y * xsize + (x+2)] - volumeData[z * xsize * ysize + y * xsize + x],​volumeData[z * xsize * ysize + (y+1) * xsize + x] - volumeData[z * xsize * ysize + (y-1) * xsize + x],​volumeData[(z+1) * xsize * ysize + y * xsize + x] - volumeData[(z-1) * xsize * ysize + y * xsize + x]);+ ​grid.n[1] = glm::​vec3(volumeData[z * xsize * ysize + y * xsize + (x+2)] - volumeData[z * xsize * ysize + y * xsize + x],​volumeData[z * xsize * ysize + (y+1) * xsize + (x+1)] - volumeData[z * xsize * ysize + (y-1) * xsize + (x+1)],​volumeData[(z+1) * xsize * ysize + y * xsize + (x+1)] - volumeData[(z-1) * xsize * ysize + y * xsize + (x+1)]);
 //Atentie sa nu ieșiti din volum  !!! //Atentie sa nu ieșiti din volum  !!!
 </​code>​ </​code>​
Line 96: Line 97:
  
 ==== Cerinte laborator ==== ==== Cerinte laborator ====
-  - Să se completeze pozitiile și valorile scalare ale varfurilor ​voxelilor din volum, ''​grid.p[]''​ și ''​grid.val[]''​. Dacă se completează corect, pe ecran va apărea suprafața triunghiulară (cu normale per triunghi)  +  - Să se completeze pozitiile și valorile scalare ale vârfurilor ​voxelilor din volum, ''​grid.p[]''​ și ''​grid.val[]''​. Dacă se completează corect, pe ecran va apărea suprafața triunghiulară (cu normale per triunghi)  
-  - +  - Să se modifice izovaloarea la apăsarea unor taste (în ''​onInputUpdate()''​). La modificarea izovalorii, trebuie reapelată funcția ''​reconstructSurface()''​ 
 +  - Să se calculeze normalele vârfurilor voxelilor din volum, ''​grid.n[]''​ prin diferențe finite (și apoi să se normalizeze) 
 +  - Să se completeze ''​normallist[]''​ - tabloul cu normalele asociate punctelor de intersecție de pe muchiile voxelului curent (calculate prin interpolare între normalele din vârfurile voxelului) 
 +  - Să se determine normalele ''​normal1'',​ ''​normal2''​ și ''​normal3''​ asociate triunghiului curent care rezultă în urma intersecției dintre izosuprafață și voxel. Să se înlocuiască normala per triunghi cu normalele per vârfurile triunghiului. Dacă se completează corect, pe ecran va apărea suprafața triunghiulară netedă 
 + 
 +==== Demo ==== 
 + 
 +<​html>​ 
 +<p style="​text-align:​center;​margin:​auto;">​ 
 +<iframe width="​430"​ height="​250"​ src="​https://​www.youtube.com/​embed/​BPVjnVhJ27g"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe>​ 
 +</​p>​ 
 +</​html>​
vdvac/lab1.1709710306.txt.gz · Last modified: 2024/03/06 09:31 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