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
: - glm::normalize(camera→m_transform→GetLocalOZVector())
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
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).
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.