t rfogatvizualiz ci
Download
Skip this Video
Download Presentation
Térfogatvizualizáció

Loading in 2 Seconds...

play fullscreen
1 / 29

Térfogatvizualizáció - PowerPoint PPT Presentation


  • 79 Views
  • Uploaded on

Térfogatvizualizáció. Szirmay-Kalos László. Térfogati modellek. hőmérséklet sűrűség légnyomás potenciál anyagfeszültség. v(x,y,z). v(x,y,z). tárolás: 3D tömb. Térfogati modell megjelenítése. Megjelenítés átlátszó anyagként (belsejébe belelátunk)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Térfogatvizualizáció' - meriel


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
t rfogatvizualiz ci

Térfogatvizualizáció

Szirmay-Kalos László

t rfogati modellek
Térfogati modellek

hőmérséklet

sűrűség

légnyomás

potenciál

anyagfeszültség

...

v(x,y,z)

v(x,y,z)

tárolás: 3D tömb

t rfogati modell megjelen t se
Térfogati modell megjelenítése
  • Megjelenítés átlátszó anyagként (belsejébe belelátunk)
  • Adott szintfelület kiemelése (külsôt lehámozzuk)
tl tsz anyagok
Átlátszó anyagok

L(s + ds)

L(s)

dL(s)/ds = - kt · L(s) + ka · Le + f(‘,) Li(‘)d‘

L(s + s)

L(s)

L(s + s) = L(s) - kt s · L(s) + Li(s) s

(s)

C(s)

sz m t s f nysug rk vet ssel
Számítás fénysugárkövetéssel

L(s + s) = (1- (s)) · L(s) + C(s)

L(s)

s=0

L = 0

for(s = 0; s < T; s += s) {

L = (1- (s)) · L + C(s)

}

slide7
Számítás láthatóság sugárkövetéssel

L*(s)

(s)

L*(s-s)=L*(s)+(1- (s)) · C(s)

(s-s)=((s)) · ((s))

L* =  0

for( s = T; s >0 ; s -= s ) {

L* += (1- ) · C(s)

(1- ) · ((s))

if (break

}

t rfogat vet t s
Térfogat vetítés

L(s)

L(s + s) = (1- (s)) · L(s) + C(s) OpenGL blending

voxel sz n s opacit s transfer functions c t v f ggv
Voxel szín és opacitás: Transfer functions: (C,)=T(v függv)
  • Röntgen: (C,)=T(v(x,y,z))
    • opacitás = v(x,y,z)
    • C(0) = 1, egyébként 0
  • Klasszikus árnyalási modellek
    • opacitás: v osztályozása
    • C = árnyalási modell (diffúz + Phong)
      • normál = grad v
      • opacitás *= | grad v |
  • Magasabb rendű derivált (görbület)
  • Transzlucens anyagok (subsurface scattering)
marching cubes
Marching cubes

v(x,y,z) > szint

v(x,y,z) < szint

mas roz kock k
Masírozó kockák

Szintérték = 110

Szintérték = 60

isosurface ray casting
Isosurface ray casting

normal = grad v

v(x,y,z) > isovalue

gpu ray casting
GPU ray-casting

right

up

lookat

eye

p

q

entry

p = lookat + right + up

, are in [-1,1]

exit

Unit cube with 3D texture

isosurface ray casting1
Isosurface ray-casting

Full screen quad

For each pixel

Find pixel center p

raydir = normalize(p – eye);

Find exit and entry

for(t = entry; t < exit; t+=dt) {

q = eye + raydir * t;

if (volume[q] > isovalue) break;

}

normal vector estimation;

illumination

}

Interpolation

from the corners

Clipping

central differences

slide24
GPU Isosurface ray-casting

volume

eye, isolevel, material/light properties

Ray casting

Pixel

shader

CPU

program

Vertex shader

Rasterization

Interpolation

Vertices

of the

window

quad

ray/window

hpos=fullscreen

textcoords

Volume

slide25
CPU program - OpenGL display

void Display( ) {

// PASS: non uniform parameters

glBegin( GL_QUADS );

Vector p = lookat - Right + Up;

glTexCoord3f(p.x, p.y. p.z); glVertex3f(-1, 1, 0);

p = lookat - Right - Up;

glTexCoord3f(p.x, p.y. p.z); glVertex3f(-1, -1, 0);

p = lookat + Right - Up;

glTexCoord3f(p.x, p.y. p.z); glVertex3f(1, -1, 0);

p = lookat + Right + Up;

glTexCoord3f(p.x, p.y. p.z); glVertex3f(1, 1, 0);

glEnd();

}

slide26
Ray casting: vertexshader

voidVertexShader(

in float4 hPosIn : POSITION,

in float3 wPosIn : TEXCOORD0,

out float4 hPosOut : POSITION,

out float3 wPosOut : TEXCOORD0 )

{

hPosOut =hPosIn;

wPosOut = wPosIn;

}

slide27
Ray casting: fragment shader

void FragmentShader( in float3 p : TEXCOORD0,

uniform float3 eye,

uniform sampler3D volume,

uniform float isolevel,

uniform float3 lightdir, lightint, kd 

out float3color : COLOR )

{

float3 raydir = normalize(p – eye);

float2 inUnitCube = Intersect(eye, raydir);

float entry = inUnitCube.x, exit = inUnitCube.y;

float dt = (exit – entry) / STEPS;

bool found = false;

float3 q;

for(t= entry; t < exit; t += dt) {

if ( !found ) {

q = eye + raydir * t;

if (tex3D(volume, q).r > isolevel) found = true;

}

}

slide28
Ray castingfragment shader cont’d

color = float3(0, 0, 0); // background color

if ( found ) {

float3 normal;

normal.x = tex3d(volume, q + float3(1/RES,0,0)) –

tex3d(volume, q - float3(1/RES,0,0));

normal.y = tex3d(volume, q + float3(0,1/RES,0)) –

tex3d(volume, q - float3(0,1/RES,0));

normal.z = tex3d(volume, q + float3(0,0,1/RES)) –

tex3d(volume, q - float3(0,0,1/RES));

normal = normalize( normal );

color = lightint * kd * saturate(dot(lightdir, normal));

}

}

ad