This shows you the differences between two versions of the page.
| 
    vdvac:lab2 [2024/03/25 14:37] anca.morar [Etapa 2]  | 
    
    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 38: | 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 55: | 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 87: | 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 99: | 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> | ||
| + | |||