5 |
|
|
6 |
input string dataFile; // name of dataset |
input string dataFile; // name of dataset |
7 |
input real stepSz; // size of steps |
input real stepSz; // size of steps |
8 |
input vec<3> lightDir; |
input vec3 lightDir; |
9 |
input vec<3> lightCol; |
input vec3 lightCol; |
10 |
input vec<3> eye; // location of eye point |
input vec3 eye; // location of eye point |
11 |
input vec<3> orig; // location of pixel (0,0) |
input vec3 orig; // location of pixel (0,0) |
12 |
input vec<3> cVec; // vector between pixels horizontally |
input vec3 cVec; // vector between pixels horizontally |
13 |
input vec<3> rVec; // vector between pixels vertically |
input vec3 rVec; // vector between pixels vertically |
14 |
input real pka; |
input real pka; |
15 |
input real pkd; |
input real pkd; |
16 |
input real pks; |
input real pks; |
17 |
input real psh; |
input real psh; |
18 |
|
|
19 |
image[3] img = load (dataFile); |
image(3)[] img = load (dataFile); |
20 |
|
|
21 |
field#1[3] F = convolve (bspln3, img); |
field#1(3)[] F = convolve (bspln3, img); |
22 |
|
|
23 |
field#0<4>[1] txf = convolve (tent, load("txf-rgba.nrrd")); |
field#0(4)[3] txf = convolve (tent, load("txf-rgba.nrrd")); |
24 |
|
|
25 |
actor RayCast (int row, int col) |
actor RayCast (int row, int col) |
26 |
{ |
{ |
27 |
vec<3> pos = orig + row*rVec + col*cVec; |
vec3 pos = orig + row*rVec + col*cVec; |
28 |
vec<3> dir = pos - eye/|pos - eye|; |
vec3 dir = pos - eye/|pos - eye|; |
29 |
real t = 0.0; |
real t = 0.0; |
30 |
vec<3> rayRGB = (0.0, 0.0, 0.0); |
vec3 rayRGB = (0.0, 0.0, 0.0); |
31 |
real rayTransp = 1.0; |
real rayTransp = 1.0; |
32 |
|
|
33 |
update |
update |
34 |
{ |
{ |
35 |
if (inside (pos,F)) { |
if (inside (pos,F)) { |
36 |
real val = F@pos; |
real val = F@pos; |
37 |
vec<3> grad = (D F)@pos; |
vec3 grad = (D F)@pos; |
38 |
vec<3> norm = grad/|grad|; |
vec3 norm = grad/|grad|; |
39 |
vec<3> half = lightDir - dir/|lightDir - dir|; |
vec3 half = lightDir - dir/|lightDir - dir|; |
40 |
vec<4> matRGBA = txf@val; |
vec4 matRGBA = txf@val; |
41 |
vec<3> matRGB = (matRGBA[0],matRGBA[1],matRGBA[2]); |
vec3 matRGB = (matRGBA[0],matRGBA[1],matRGBA[2]); |
42 |
real ldotn = dot(lightDir,norm); |
real ldotn = dot(lightDir,norm); |
43 |
real hdotn = dot(halfDir,norm); |
real hdotn = dot(halfDir,norm); |
44 |
// hey the per-component multiplication is in matRGB*lightRGB |
// hey the per-component multiplication is in matRGB*lightRGB |
45 |
vec<3> pntRGB = (ka + kd*ldotn)*matRGB*lightRGB + ks*pow(hdotn,psh)*lightRGB; |
vec3 pntRGB = (ka + kd*ldotn)*matRGB*lightRGB + ks*pow(hdotn,psh)*lightRGB; |
46 |
rayRGB = rayRGB + rayTranps*matRGBA[3]*matRGB; |
rayRGB = rayRGB + rayTranps*matRGBA[3]*matRGB; |
47 |
rayTransp = rayTranps*(1.0 - matRGBA[3]); |
rayTransp = rayTranps*(1.0 - matRGBA[3]); |
48 |
} |
} |