Differences

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

Link to this comparison view

vdvac:tema1 [2024/04/03 12:18]
anca.morar [Detalii de implementare]
vdvac:tema1 [2024/04/03 13:24] (current)
anca.morar [Detalii de implementare]
Line 20: Line 20:
 Se poate porni de la laboratoarele 2 (Ray casting) și 3 (Redarea folosind texturi 2D) Se poate porni de la laboratoarele 2 (Ray casting) și 3 (Redarea folosind texturi 2D)
  
-__**1. Atribute importante**__+__**Atribute importante**__
   * volumul de date (''​volumeData''​) și dimensiunea acestuia (''​xsize'',​ ''​ysize'',​ ''​zsize''​)   * volumul de date (''​volumeData''​) și dimensiunea acestuia (''​xsize'',​ ''​ysize'',​ ''​zsize''​)
   * textura 3D, cu datele din volum (''​volumeTexture''​)   * textura 3D, cu datele din volum (''​volumeTexture''​)
Line 28: Line 28:
 __**Metode importante**__ __**Metode importante**__
  
-**//Citirea și încărcarea datelor//​**:​ Citirea dintr-un fișier .raw și încărcarea datelor în volum+**1.** ​**//Citirea și încărcarea datelor//​**:​ Citirea dintr-un fișier .raw și încărcarea datelor în volum
   * Se poate folosi funcția ''​loadRAWFile()''​ din laboratoarele anterioare   * Se poate folosi funcția ''​loadRAWFile()''​ din laboratoarele anterioare
  
-//**Crearea unui cub**// cu vârfurile în intervalul (0,​0,​0)-(1,​1,​1)+**2.** ​//**Crearea unui cub**// cu vârfurile în intervalul (0,​0,​0)-(1,​1,​1)
   * Se poate folosi funcția ''​createCube()''​ din laboratorul 2   * Se poate folosi funcția ''​createCube()''​ din laboratorul 2
  
-//​**Generarea texturii 3D**// și încărcarea datelor din volum în această textură+**3.** ​//​**Generarea texturii 3D**// și încărcarea datelor din volum în această textură
   * Se poate folosi funcția ''​createVolumeTexture()''​ din laboratorul 2   * Se poate folosi funcția ''​createVolumeTexture()''​ din laboratorul 2
  
-**//​Intersecția dintre o dreaptă și un plan//**+**4.** ​**//​Intersecția dintre o dreaptă și un plan//**
   * Intersecția se poate calcula cu formulele de [[https://​en.wikipedia.org/​wiki/​Line%E2%80%93plane_intersection|aici]] (forma algebrică)   * Intersecția se poate calcula cu formulele de [[https://​en.wikipedia.org/​wiki/​Line%E2%80%93plane_intersection|aici]] (forma algebrică)
   * Planul este caracterizat prin:   * Planul este caracterizat prin:
Line 46: Line 46:
     * un punct de pe dreaptă ​     * un punct de pe dreaptă ​
  
-**//​Sortarea punctelor în ordine trigonometrică sau orară//**+**5.** ​**//​Sortarea punctelor în ordine trigonometrică sau orară//**
     *  Se poate folosi algoritmul prezentat [[https://​www.baeldung.com/​cs/​sort-points-clockwise|aici]] ​     *  Se poate folosi algoritmul prezentat [[https://​www.baeldung.com/​cs/​sort-points-clockwise|aici]] ​
  
-//​**Generarea unui poligon din geometria proxy**// în funcție de vectorul de vizualizare,​ poziția observatorului (''​obsPos''​) și distanța de la observator la planul de secționare (''​viewDist''​)+**6.** ​//​**Generarea unui poligon din geometria proxy**// în funcție de vectorul de vizualizare,​ poziția observatorului (''​obsPos''​) și distanța de la observator la planul de secționare (''​viewDist''​)
     * Pentru fiecare latură a cubului, se calculează intersecția dintre dreapta pe care stă latura și planul de secționare curent     * Pentru fiecare latură a cubului, se calculează intersecția dintre dreapta pe care stă latura și planul de secționare curent
       * Planul de secționare e caracterizat prin       * Planul de secționare e caracterizat prin
-        * vectorul de vizualizare ''​viewVec''​+        * normala la plan: vectorul de vizualizare ''​viewVec'':​  
 +          * ''​- glm::​normalize(camera->​m_transform->​GetLocalOZVector())''​
         * un punct de pe plan (de exemplu, dat de ''​obsPos + viewVec * viewDist''​)         * un punct de pe plan (de exemplu, dat de ''​obsPos + viewVec * viewDist''​)
       * Dreapta curentă e caracterizată prin       * Dreapta curentă e caracterizată prin
Line 60: Line 61:
     * Punctele rămase se sortează în ordine trigonometrică/​orară     * Punctele rămase se sortează în ordine trigonometrică/​orară
  
-//​**Afișarea geometriei proxy**//+**7.** ​//​**Afișarea geometriei proxy**//
   * Funcția de generare a unui poligon proxy se apelează de ''​poligNo''​ ori, modificând distanța de la observator la planul curent de secționare (se randează poligoanele în ordinea de la cel mai îndepărtat la cel mai apropiat)   * Funcția de generare a unui poligon proxy se apelează de ''​poligNo''​ ori, modificând distanța de la observator la planul curent de secționare (se randează poligoanele în ordinea de la cel mai îndepărtat la cel mai apropiat)
     * ''​poligNo''​ poate fi modificat de la tastatură     * ''​poligNo''​ poate fi modificat de la tastatură
 +    * o valoare rezonabilă inițială pentru ''​poligNo''​ poate fi dimensiunea volumului (pe una din axe). De exemplu, pentru volumul de date din fișierul ''​engine.raw'',​ valoarea inițială ''​poligNo = 256''​
   * Se activează blending-ul și se setează funcția de blending pentru acumularea din spate în față (la fel ca în laboratorul 3)   * Se activează blending-ul și se setează funcția de blending pentru acumularea din spate în față (la fel ca în laboratorul 3)
  
Line 104: Line 106:
   - Alte elemente interesante   - Alte elemente interesante
  
 +====Demo====
 +
 +<​html>​
 +<p style="​text-align:​center;​margin:​auto;">​
 +<iframe width="​430"​ height="​250"​ src="​https://​www.youtube.com/​embed/​6fc2_RY4JOE"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe>​
 +</p>
 +</​html>​
vdvac/tema1.1712135905.txt.gz · Last modified: 2024/04/03 12:18 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