Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /trunk/test/vr-phong.diderot
ViewVC logotype

Annotation of /trunk/test/vr-phong.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 511 - (view) (download)

1 : glk 46 // vr.diderot
2 :     //
3 :     // volume rendering example in Diderot
4 :     //
5 :    
6 :     input string dataFile; // name of dataset
7 : jhr 243 input string txfFile; // name of transfer-function file
8 : glk 46 input real stepSz; // size of steps
9 : jhr 51 input vec3 lightDir;
10 : jhr 87 input vec3 lightRGB;
11 : jhr 51 input vec3 eye; // location of eye point
12 :     input vec3 orig; // location of pixel (0,0)
13 :     input vec3 cVec; // vector between pixels horizontally
14 :     input vec3 rVec; // vector between pixels vertically
15 : jhr 87 input real ka;
16 :     input real kd;
17 :     input real ks;
18 :     input real sh;
19 : glk 46
20 : jhr 51 image(3)[] img = load (dataFile);
21 : glk 46
22 : jhr 248 //field#1(3)[] F = img (*) bspln3;
23 :     field#2(3)[] F = img (*) bspln3;
24 : glk 49
25 : jhr 248 field#0(1)[4] txf = load(txfFile) ⊛ tent;
26 : glk 46
27 : jhr 511 strand RayCast (int row, int col)
28 : glk 46 {
29 : jhr 59 vec3 pos = orig + real(row)*rVec + real(col)*cVec;
30 : glk 54 vec3 dir = (pos - eye)/|pos - eye|;
31 : glk 46 real t = 0.0;
32 : jhr 163 output vec3 rayRGB = [0.0, 0.0, 0.0];
33 : glk 46 real rayTransp = 1.0;
34 :    
35 :     update
36 :     {
37 :     if (inside (pos,F)) {
38 :     real val = F@pos;
39 : jhr 384 vec3 grad = ∇F@pos;
40 : jhr 51 vec3 norm = grad/|grad|;
41 : jhr 87 vec3 halfDir = (lightDir - dir)/|lightDir - dir|;
42 : jhr 384 vec4 matRGBA = txf@val;
43 : jhr 86 vec3 matRGB = [matRGBA[0],matRGBA[1],matRGBA[2]];
44 : jhr 87 real ldotn = dot(lightDir, norm);
45 :     real hdotn = dot(halfDir, norm);
46 : jhr 90 vec3 pntRGB = (ka + kd*ldotn)*modulate(matRGB,lightRGB) + ks*pow(hdotn,sh)*lightRGB;
47 : jhr 87 rayRGB = rayRGB + rayTransp*matRGBA[3]*pntRGB;
48 :     rayTransp = rayTransp*(1.0 - matRGBA[3]);
49 : glk 46 }
50 :     if (t > 1.0 || rayTransp < 0.01) // a little odd; ray terminates at length=1
51 :     stabilize;
52 :     pos = pos + stepSz*dir;
53 :     t = t + stepSz;
54 :     }
55 :    
56 : jhr 90 }
57 : glk 46
58 : jhr 90 initially [ RayCast(r, c) | r in 0..1023, c in 0..1023 ];

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0