Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 2stângase 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''​)
- +  ​- Să se calculeze coordonatele ''​ExitFragCoord''​ pentru accesarea texturii ''​ExitPoints'' ​(în ''​FragmentShader_raycasting.glsl''​)
-De acum încolo totul  +
-  ​- Să se calculeze coordonatele ''​ExitFragCoord''​ pentru accesarea texturii ''​ExitPoints''​+
   - Să se calculeze ''​ExitPoint''​ - punctul de ieșire al razei din volum   - Să se calculeze ''​ExitPoint''​ - punctul de ieșire al razei din volum
   - Să se calculeze direcția razei   - Să se calculeze direcția razei
   - 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>​
 +
vdvac/lab2.1711369867.txt.gz · Last modified: 2024/03/25 14:31 by anca.morar
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0