Home My Page Projects Code Snippets Project Openings diderot

# SCM Repository

[diderot] View of /branches/vis12/test/lic.diderot
 [diderot] / branches / vis12 / test / lic.diderot

# View of /branches/vis12/test/lic.diderot

Sun Jan 22 15:23:36 2012 UTC (7 years, 7 months ago) by jhr
File size: 1307 byte(s)
Create a branch to implement things that we need for the Vis 2012 paper
// lic.diderot
//
// simple demo of the line integral convolution (LIC) method
// of vector field viz
//
// process output with:
// unu reshape -i mip.txt -s 300 200 | unu quantize -b 8  -o lic.png

int imgSizeX = 300;
int imgSizeY = 200;
real h = 0.01;    // step size of integration
int stepNum = 25; // take this many steps both upstream and downstream

field#1(2)[2] V = load("../data/vorttest.nrrd") ⊛ ctmr;
field#0(2)[] R = load("../data/vorttest-rand.nrrd") ⊛ tent;

strand LIC (int xi, int yi) {
real xx = lerp(0.0, 3.0, -0.5, real(xi), real(imgSizeX)-0.5);
real yy = lerp(0.0, 2.0, -0.5, real(yi), real(imgSizeY)-0.5);
vec2 pos0 = [xx,yy];
vec2 forw = pos0;
vec2 back = pos0;
output real sum = R(pos0);
int step = 0;

update {
// Euler integration step
// forw = forw + h*V(forw);
// back = back - h*V(back);
// Midpoint method step
forw += h*V(forw + 0.5*h*V(forw));
back -= h*V(back - 0.5*h*V(back));
sum += R(forw) + R(back);
step += 1;
if (step == stepNum) {
// modulate output by velocity at initial position
sum = |V(pos0)|*sum/real(1 + 2*stepNum);
stabilize;
}
}
}

initially [ LIC(xi, yi) | yi in 0..(imgSizeY-1), xi in 0..(imgSizeX-1) ];