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

SCM Repository

[diderot] Annotation of /branches/pure-cfg/test/vr-lite.diderot
ViewVC logotype

Annotation of /branches/pure-cfg/test/vr-lite.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 772 - (view) (download)

1 : glk 309 // vr-lite.diderot
2 :     //
3 :     // simple diffuse-only volume rendering with head-light, with an
4 :     // opacity function that varies linearly between two values
5 :     //
6 :    
7 :     input string dataFile; // name of dataset
8 :     input real stepSz = 0.1; // size of steps
9 :     input vec3 eye; // location of eye point
10 :     input vec3 orig; // location of pixel (0,0)
11 :     input vec3 cVec; // vector between pixels horizontally
12 :     input vec3 rVec; // vector between pixels vertically
13 :     input real valOpacMin; // highest value with opacity 0.0
14 :     input real valOpacMax; // lowest value with opacity 1.0
15 : glk 316 // valOpacMin,Max pairs for sample datasets:
16 :     // txs.nrrd 0.15, 0.35
17 :     // vfrhand-nohip.nhdr, for skin: 200, 500
18 :     // vfrhand-nohip.nhdr, for bone: 1330, 1630
19 : glk 309
20 :     image(3)[] img = load (dataFile);
21 :    
22 :     //field#1(3)[] F = convolve (bspln3, img);
23 :     field#2(3)[] F = img ⊛ bspln3;
24 :    
25 : jhr 503 strand RayCast (int row, int col)
26 : glk 309 {
27 :     vec3 pos = orig + real(row)*rVec + real(col)*cVec;
28 : glk 772 vec3 dir = normalize(pos - eye);
29 : glk 309 real t = 0.0;
30 :     real transp = 1.0;
31 :     real gray = 0.0;
32 :     output vec4 rgba = [0.0, 0.0, 0.0, 0.0];
33 :    
34 :     update
35 :     {
36 :     pos = pos + stepSz*dir;
37 :     if (inside (pos,F)) {
38 :     real val = F@pos;
39 : glk 772 vec3 norm = -normalize(∇F@pos);
40 : glk 309 if (val > valOpacMin) { // we have some opacity
41 : glk 770 real opac = min(1.0, lerp(0.0, 1.0, valOpacMin, val, valOpacMax));
42 : jhr 765 gray = gray + transp*opac*max(0.0, -dir • norm);
43 : glk 309 transp = transp*(1.0 - opac);
44 :     }
45 :     }
46 :     if (transp < 0.01) { // early ray termination
47 : jhr 669 rgba = [gray, gray, gray, 1.0-transp]; /* FIXME */
48 : glk 309 transp = 0.0;
49 :     stabilize;
50 :     }
51 :     if (t > 40.0) {
52 : jhr 669 rgba = [gray, gray, gray, 1.0-transp]; /* FIXME */
53 : glk 309 stabilize;
54 :     }
55 :     t = t + stepSz;
56 :     }
57 :    
58 : glk 315 stabilize {
59 : jhr 669 // rgba = [gray, gray, gray, 1.0-transp];
60 : glk 315 }
61 :    
62 : glk 309 /* render: output rgba */
63 :     }
64 :    
65 :     initially [ RayCast(r, c) | r in 0..199, c in 0..199 ];

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