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 104 - (view) (download)

1 : glk 46 // vr.diderot
2 :     //
3 :     // volume rendering example in Diderot
4 :     //
5 :    
6 :     input string dataFile; // name of dataset
7 :     input real stepSz; // size of steps
8 : jhr 51 input vec3 lightDir;
9 : jhr 87 input vec3 lightRGB;
10 : jhr 51 input vec3 eye; // location of eye point
11 :     input vec3 orig; // location of pixel (0,0)
12 :     input vec3 cVec; // vector between pixels horizontally
13 :     input vec3 rVec; // vector between pixels vertically
14 : jhr 87 input real ka;
15 :     input real kd;
16 :     input real ks;
17 :     input real sh;
18 : glk 46
19 : jhr 51 image(3)[] img = load (dataFile);
20 : glk 46
21 : jhr 104 //field#1(3)[] F = convolve (bspln3, img);
22 :     field#2(3)[] F = convolve (bspln3, img);
23 : glk 49
24 : glk 52 field#0(1)[4] txf = convolve (tent, load("txf-rgba.nrrd"));
25 : glk 46
26 :     actor RayCast (int row, int col)
27 :     {
28 : glk 58 //// * : int x vec3 -> vec3
29 :     //// + : vec3 x vec3 -> vec3
30 : jhr 59 vec3 pos = orig + real(row)*rVec + real(col)*cVec;
31 : glk 58 //// |()| : vec -> real
32 :     //// - : vec3 x vec3 -> vec3
33 :     //// / : vec3 x real -> vec3
34 : glk 54 vec3 dir = (pos - eye)/|pos - eye|;
35 : glk 46 real t = 0.0;
36 : jhr 86 vec3 rayRGB = [0.0, 0.0, 0.0];
37 : glk 46 real rayTransp = 1.0;
38 :    
39 :     update
40 :     {
41 :     if (inside (pos,F)) {
42 : glk 58 //// @ : field x vec3 -> real
43 : glk 46 real val = F@pos;
44 : glk 58 //// D : field -> field
45 : jhr 51 vec3 grad = (D F)@pos;
46 :     vec3 norm = grad/|grad|;
47 : jhr 87 vec3 halfDir = (lightDir - dir)/|lightDir - dir|;
48 : jhr 86 vec4 matRGBA = txf@[val];
49 :     vec3 matRGB = [matRGBA[0],matRGBA[1],matRGBA[2]];
50 : glk 58 //// dot : vec3 x vec3 -> real
51 : jhr 87 real ldotn = dot(lightDir, norm);
52 :     real hdotn = dot(halfDir, norm);
53 : glk 46 // hey the per-component multiplication is in matRGB*lightRGB
54 : glk 58 //// * : real x vec3 -> vec3
55 : jhr 59 //// modulate : vec3 x vec3 -> vec3
56 : glk 58 //// + : vec3 x vec3 -> vec3
57 :     //// pow : real x real -> real
58 : jhr 90 vec3 pntRGB = (ka + kd*ldotn)*modulate(matRGB,lightRGB) + ks*pow(hdotn,sh)*lightRGB;
59 : jhr 87 rayRGB = rayRGB + rayTransp*matRGBA[3]*pntRGB;
60 : glk 58 //// * : real x real -> real
61 :     //// - : real x real -> real
62 : jhr 87 rayTransp = rayTransp*(1.0 - matRGBA[3]);
63 : glk 46 }
64 : glk 58 //// > : real x real -> bool
65 :     //// < : real x real -> bool
66 :     //// || : bool x bool -> bool
67 : glk 46 if (t > 1.0 || rayTransp < 0.01) // a little odd; ray terminates at length=1
68 :     stabilize;
69 :     pos = pos + stepSz*dir;
70 :     t = t + stepSz;
71 :     }
72 :    
73 : jhr 90 }
74 : glk 46
75 : 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