This shows you the differences between two versions of the page.
| 
    vdvac:lab2 [2024/03/25 14:31] anca.morar [Cerinte laborator]  | 
    
    vdvac:lab2 [2024/03/25 15:41] (current) anca.morar [Etapa 2]  | 
    ||
|---|---|---|---|
| Line 7: | Line 7: | ||
| **Figura 1** | **Figura 1** | ||
| - | {{:vdvac:lab2_fig1.png?480|}} | + | {{:vdvac:lab2_fig1.png?550|}} | 
| ===== Concepte teoretice ===== | ===== Concepte teoretice ===== | ||
| Line 25: | Line 25: | ||
| * Volumul încadrator al volumului de date, în spațiul obiect, este un cub cu coordonatele vârfurilor în intervalul (0,0,0) - (1,1,1) | * Volumul încadrator al volumului de date, în spațiul obiect, este un cub cu coordonatele vârfurilor în intervalul (0,0,0) - (1,1,1) | ||
| * Astfel, coordonatele textură asociate vârfurilor cubului sunt chiar coordonatele vârfurilor | * Astfel, coordonatele textură asociate vârfurilor cubului sunt chiar coordonatele vârfurilor | ||
| - | * Asociem vârfurilor culorile (R,G,B) corespunzătoare coordonatelor vârfurilor, si rasterizăm fețele cubului | + | * Asociem vârfurilor culorile (R,G,B) corespunzătoare coordonatelor vârfurilor, si rasterizăm fețele cubului <code> | 
| - | + | ||
| - | <code> | + | |
| Mesh* lab2::createCube(const char* name) | Mesh* lab2::createCube(const char* name) | ||
| { | { | ||
| Line 40: | Line 38: | ||
| </code> | </code> | ||
| - | + | * Atunci culorile punctelor reprezintă chiar coordonatele lor. În Figura 2, stânga, se văd fețele față ale cubului și în dreapta, fețele spate: | |
| - | + | ||
| - | * Atunci culorile punctelor reprezintă chiar coordonatele lor. În Figura 2.stânga se văd fețele față ale cubului și în dreapta, fețele spate: | + | |
| * punctele de pe fețele față sunt punctele în care razele intră în volum | * punctele de pe fețele față sunt punctele în care razele intră în volum | ||
| * punctele de pe fețele spate sunt punctele în care razele ies din volum | * punctele de pe fețele spate sunt punctele în care razele ies din volum | ||
| **Figura 2** | **Figura 2** | ||
| + | |||
| {{:vdvac:lab2_fig2.png?400|}} | {{:vdvac:lab2_fig2.png?400|}} | ||
| ==== Etapa 1 ==== | ==== Etapa 1 ==== | ||
| - | **Determinarea punctelor de ieșire din volum ale razelor** | + | **Determinarea punctelor de ieșire ale razelor din volum** | 
| * Se desenează într-un framebuffer (nu în cel default)<code>frameBuffer->Bind(); </code> | * Se desenează într-un framebuffer (nu în cel default)<code>frameBuffer->Bind(); </code> | ||
| * Se rasterizează fețele din spate ale cubului încadrator<code>glEnable(GL_CULL_FACE); | * Se rasterizează fețele din spate ale cubului încadrator<code>glEnable(GL_CULL_FACE); | ||
| Line 59: | Line 56: | ||
| ==== Etapa 2 ==== | ==== Etapa 2 ==== | ||
| - | **Determinarea punctelor de ieșire din volum ale razelor** | + | **Determinarea punctelor de intrare ale razelor în volum ** | 
| * Se desenează în buffer-ul default<code>FrameBuffer::BindDefault();</code> | * Se desenează în buffer-ul default<code>FrameBuffer::BindDefault();</code> | ||
| Line 80: | Line 77: | ||
| * Coordonata în NDC a fiecărui vârf e transmisă către fragment shader ca o coordonată de textură <code>ExitPointCoord = gl_Position;</code> | * Coordonata în NDC a fiecărui vârf e transmisă către fragment shader ca o coordonată de textură <code>ExitPointCoord = gl_Position;</code> | ||
| * ''ExitPointCoord '' se folosește în **fragment shader** pentru accesarea texturii create în prima etapă. | * ''ExitPointCoord '' se folosește în **fragment shader** pentru accesarea texturii create în prima etapă. | ||
| - | * pentru indexarea texturii se obțin coordonatecoordonate ''ExitFragCoord'' cu valori cuprinse între 0 și 1: {{:vdvac:lab2_fig3.png?250|}} | + | * pentru indexarea texturii se obțin coordonatecoordonate ''ExitFragCoord'' cu valori cuprinse între 0 și 1:  | 
| + | {{ :vdvac:lab2_fig3.png?270 |}} | ||
| * Punctul de intrare se obține din culoarea fragmentului curent (în VS): <code>EntryPoint = v_color;</code> | * Punctul de intrare se obține din culoarea fragmentului curent (în VS): <code>EntryPoint = v_color;</code> | ||
| Line 89: | Line 88: | ||
| * Se modulează opacitatea și culoarea | * Se modulează opacitatea și culoarea | ||
| * Se realizează compunere din față în spate<code>colorAcum.rgb += (1.0 - colorAcum.a) * colorSample.rgb; | * Se realizează compunere din față în spate<code>colorAcum.rgb += (1.0 - colorAcum.a) * colorSample.rgb; | ||
| - | colorAcum.a += (1.0 - colorAcum.a) * colorSample.a;</code> | + | colorAcum.a += (1.0 - colorAcum.a) * colorSample.a;</code> | 
| * Se verifică dacă raza curentă a ieșit din volum sau dacă opacitatea acumulată a ajuns la 1 | * Se verifică dacă raza curentă a ieșit din volum sau dacă opacitatea acumulată a ajuns la 1 | ||
| - | ==== Cerinte laborator ==== | + | ==== Cerințe laborator ==== | 
| - | - Să se completeze variabila ''frag_color'' pentru a fi transmisă mai departe către fragment shader (în ''VertexShader_backface.glsl'' | + | - Să se completeze valoarea variabilei ''frag_color'' pentru a fi transmisă mai departe către fragment shader (în ''VertexShader_backface.glsl'') | 
| - Să se calculeze corect culoarea ''out_color'' ca să se afișeze fețele spate ale volumului încadrator (în ''FragmentShader_backface.glsl'') | - Să se calculeze corect culoarea ''out_color'' ca să se afișeze fețele spate ale volumului încadrator (în ''FragmentShader_backface.glsl'') | ||
| - Să se trimită către fragment shader ''EntryPoint'' și ''ExitPointCoord'' (în ''VertexShader_raycasting.glsl'') | - Să se trimită către fragment shader ''EntryPoint'' și ''ExitPointCoord'' (în ''VertexShader_raycasting.glsl'') | ||
| Line 101: | Line 100: | ||
| - Să se calculeze vectorul cu care se înaintează pe rază (de la punctul de eșantionare curent la următorul) | - Să se calculeze vectorul cu care se înaintează pe rază (de la punctul de eșantionare curent la următorul) | ||
| - Să se calculeze valoarea scalară a eșantionului curent (în funcție de textura ''VolumeTex'' și de coordonata de textură ''voxelCoord'') | - Să se calculeze valoarea scalară a eșantionului curent (în funcție de textura ''VolumeTex'' și de coordonata de textură ''voxelCoord'') | ||
| - | - Să se calculeze culoarea eșantionului curent (în funcție de textura ''TransferFunc'' și de coordonata de textură valoarea scalară curentă) | + | - Să se calculeze culoarea eșantionului curent (în funcție de textura ''TransferFunc'' și de coordonata de textură dată de valoarea scalară curentă) | 
| - | - Să se actualizeze poziția eșantionului curent | + | - Să se actualizeze poziția eșantionului  | 
| - Să se actualizeze lungimea parcursă pe rază | - Să se actualizeze lungimea parcursă pe rază | ||
| + | |||
| + | |||
| + | ==== Demo ==== | ||
| + | |||
| + | <html> | ||
| + | <p style="text-align:center;margin:auto;"> | ||
| + | <iframe width="430" height="250" src="https://www.youtube.com/embed/Bl_fSKLk-Cs" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> | ||
| + | </p> | ||
| + | </html> | ||
| + | |||