This shows you the differences between two versions of the page.
vdvac:tema1 [2024/04/03 12:20] anca.morar [Detalii de implementare] |
vdvac:tema1 [2024/04/03 13:24] (current) anca.morar [Detalii de implementare] |
||
---|---|---|---|
Line 28: | Line 28: | ||
__**Metode importante**__ | __**Metode importante**__ | ||
- | 1.**//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 | ||
- | 3.//**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 | ||
- | 4.//**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 | ||
- | 5.**//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ă | ||
- | 6.**//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]] | ||
- | 7.//**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ă | ||
- | 8.//**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> |