Table of Contents

Laboratorul 2

Ray casting

Ray casting reprezintă implementarea modelului teoretic de redare directă.

Figura 1

Concepte teoretice

Pașii algoritmului

Pentru fiecare rază (pixel):

  1. Calculează direcția razei care pleacă de la observator și trece prin centrul pixelului
  2. Calculează pozițiile de eșantionare de-a lungul razei
  3. Calculează valorile eșantioanelor prin interpolare triliniară
  4. Calculează gradientul în fiecare poziție de eșantionare, prin interpolare triliniară
  5. Determină o culoare și o opacitate pentru fiecare eșantion, folosind funcții de transfer și calcule de iluminare
  6. Acumulează culoarea (și opacitatea) în fiecare punct de eșantionare

Implementare

Figura 2

Etapa 1

Determinarea punctelor de ieșire ale razelor din volum

Etapa 2

Determinarea punctelor de intrare ale razelor în volum

Calculul culorilor razelor (Ray Casting)

Cerințe laborator

  1. Să se completeze valoarea variabilei frag_color pentru a fi transmisă mai departe către fragment shader (în VertexShader_backface.glsl)
  2. Să se calculeze corect culoarea out_color ca să se afișeze fețele spate ale volumului încadrator (în FragmentShader_backface.glsl)
  3. Să se trimită către fragment shader EntryPoint și ExitPointCoord (în VertexShader_raycasting.glsl)
  4. Să se calculeze coordonatele ExitFragCoord pentru accesarea texturii ExitPoints (în FragmentShader_raycasting.glsl)
  5. Să se calculeze ExitPoint - punctul de ieșire al razei din volum
  6. Să se calculeze direcția razei
  7. Să se calculeze vectorul cu care se înaintează pe rază (de la punctul de eșantionare curent la următorul)
  8. Să se calculeze valoarea scalară a eșantionului curent (în funcție de textura VolumeTex și de coordonata de textură voxelCoord)
  9. Să se calculeze culoarea eșantionului curent (în funcție de textura TransferFunc și de coordonata de textură dată de valoarea scalară curentă)
  10. Să se actualizeze poziția eșantionului
  11. Să se actualizeze lungimea parcursă pe rază

Demo