This is an old revision of the document!
Să se implementeze redarea volumelor folosind texturi 3D (cursul 6).
0 <= s, t, r <=1
0 <= x, y, z <= 1
Generarea poligoanelor
Se poate porni de la laboratoarele 2 (Ray casting) și 3 (Redarea folosind texturi 2D)
Atribute importante
volumeData
) și dimensiunea acestuia (xsize
, ysize
, zsize
)volumeTexture
)viewVec
)poligsNo
)Metode importante
1. Citirea și încărcarea datelor: Citirea dintr-un fișier .raw și încărcarea datelor în volum
loadRAWFile()
din laboratoarele anterioare2. Crearea unui cub cu vârfurile în intervalul (0,0,0)-(1,1,1)
createCube()
din laboratorul 23. Generarea texturii 3D și încărcarea datelor din volum în această textură
createVolumeTexture()
din laboratorul 24. Intersecția dintre o dreaptă și un plan
5. Sortarea punctelor în ordine trigonometrică sau orară
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
)
viewVec
obsPos + viewVec * viewDist
)(0,0,1)
, (0,1,0)
sau (1,0,0)
)7. Afișarea geometriei proxy
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 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)
==== Indicații suplimentare ====
Tema va fi implementată în OpenGL și C++. Este indicat să folosiți framework-ul și Visual Studio.
Generarea geometriei proxy se poate realiza fie în programul aplicație (fișierul .cpp), fie în vertex shader (mai complicat) sau geometry shader (recomandat).
<note>Pentru implementarea temei, în folderul src/lab_vdvac puteți crea un nou folder, de exemplu Tema1, cu fișierele Tema1.cpp și Tema1.h (pentru implementare POO, este indicat să aveți și alte fișiere). Pentru a vedea fișierele nou create în Visual Studio în Solution Explorer, puteți să rulați din nou cmake, sau să apăsați click dreapta pe filtrul lab_vdvac și să selectați Add→New Filter. După ce creați un nou filtru, de exemplu Tema1, dați click dreapta și selectați Add→Existing Item. Astfel adăugați toate fișierele din folderul nou creat. În fișierul lab_list.h trebuie adăugată și calea către header-ul temei. De exemplu: #include “lab_vdvac/Tema1/Tema1.h”</note>
<note important>
Dacă alegeți implementarea în shadere, trebuie să aveți grijă la câteva aspecte.
Instrucțiuni repetitive
Dacă folosiți instrucțiunea
for, mergeți cu număr fix de iterații. De exemplu, dacă vreți să procesați elementele unui vector de puncte de dimensiune
nrPuncte'' (care e o variabilă cu valoarea maximă 12), puteți folosi următorul artificiu:for (int i = 0; i < 12; i++) { if (i >= nrPuncte) break; .... //procesare punct curent .... }
Limită hardware
Dacă generați geometria proxy în geometry shader, intrarea programului shader poate fi un obiect bogus (de exemplu, un punct sau o linie formată din două puncte). Totuși, aveți grijă la limita de vârfuri care se pot genera pentru o singură primitivă. Astfel, este indicat ca o rulare a programului geometry shader să genereze un singur poligon al geomtriei proxy, și nu toată geometria. </note>