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

SCM Repository

[diderot] Diff of /branches/vis12-cl/test/vr-phong.diderot
ViewVC logotype

Diff of /branches/vis12-cl/test/vr-phong.diderot

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/test/vr-phong.diderot revision 86, Wed May 26 22:23:17 2010 UTC branches/vis12-cl/test/vr-phong.diderot revision 2402, Sat Jul 27 13:55:03 2013 UTC
# Line 1  Line 1 
1  // vr.diderot  // vr-phong.diderot
2  //  //
3  // volume rendering example in Diderot  // volume rendering example in Diderot
4  //  //
5    
 input string dataFile;          // name of dataset  
6  input real stepSz;              // size of steps  input real stepSz;              // size of steps
7  input vec3 lightDir;  input vec3 lightDir;
8  input vec3 lightCol;  input vec3 lightRGB;
9  input vec3 eye;               // location of eye point  input vec3 eye;               // location of eye point
10  input vec3 orig;              // location of pixel (0,0)  input vec3 orig;              // location of pixel (0,0)
11  input vec3 cVec;              // vector between pixels horizontally  input vec3 cVec;              // vector between pixels horizontally
12  input vec3 rVec;              // vector between pixels vertically  input vec3 rVec;              // vector between pixels vertically
13  input real pka;  input real ka;
14  input real pkd;  input real kd;
15  input real pks;  input real ks;
16  input real psh;  input real sh;
17    
18  image(3)[] img = load (dataFile);  field#2(3)[] F = bspln3 (*) image("../data/txs.nrrd");
19    field#0(1)[4] txf = tent ⊛ image("../data/dummy-txf-rgba.nrrd");
20    
21  field#1(3)[] F = convolve (bspln3, img);  strand RayCast (int row, int col)
   
 field#0(1)[4] txf = convolve (tent, load("txf-rgba.nrrd"));  
   
 actor RayCast (int row, int col)  
22  {  {
     //// * : int x vec3 -> vec3  
     //// + : vec3 x vec3 -> vec3  
23      vec3        pos = orig + real(row)*rVec + real(col)*cVec;      vec3        pos = orig + real(row)*rVec + real(col)*cVec;
24      //// |()| : vec -> real      vec3        dir = normalize(pos - eye);
     //// - : vec3 x vec3 -> vec3  
     //// / : vec3 x real -> vec3  
     vec3        dir = (pos - eye)/|pos - eye|;  
25      real        t = 0.0;      real        t = 0.0;
26      vec3        rayRGB = [0.0, 0.0, 0.0];      output vec3 rayRGB = [0.0, 0.0, 0.0];
27      real        rayTransp = 1.0;      real        rayTransp = 1.0;
28    
29      update      update
30      {      {
31          if (inside (pos,F)) {          if (inside (pos,F)) {
            //// @ : field x vec3 -> real  
32             real val = F@pos;             real val = F@pos;
33             //// D : field -> field             vec3 norm = normalize(-∇F@pos);
34             vec3 grad = (D F)@pos;             vec3 halfDir = normalize(lightDir - dir);
35             vec3 norm = grad/|grad|;             vec4 matRGBA = txf@val;
            vec3 half = (lightDir - dir)/|lightDir - dir|;  
            vec4 matRGBA = txf@[val];  
36             vec3 matRGB = [matRGBA[0],matRGBA[1],matRGBA[2]];             vec3 matRGB = [matRGBA[0],matRGBA[1],matRGBA[2]];
37             //// dot : vec3 x vec3 -> real             real ldotn = lightDir • norm;
38             real ldotn = dot(lightDir,norm);             real hdotn = halfDir • norm;
39             real hdotn = dot(halfDir,norm);             vec3 pntRGB = (ka + kd*ldotn)*modulate(matRGB,lightRGB) + ks*hdotn^sh*lightRGB;
40             // hey the per-component multiplication is in matRGB*lightRGB             rayRGB = rayRGB + rayTransp*matRGBA[3]*pntRGB;
41             //// * : real x vec3 -> vec3             rayTransp = rayTransp*(1.0 - matRGBA[3]);
            //// modulate : vec3 x vec3 -> vec3  
            //// + : vec3 x vec3 -> vec3  
            //// pow : real x real -> real  
            vec3 pntRGB = (ka + kd*ldotn)*modulate(matRGB,lightRGB) + ks*pow(hdotn,psh)*lightRGB;  
            rayRGB = rayRGB + rayTranps*matRGBA[3]*pntRGB;  
            //// * : real x real -> real  
            //// - : real x real -> real  
            rayTransp = rayTranps*(1.0 - matRGBA[3]);  
42          }          }
         //// > : real x real -> bool  
         //// < : real x real -> bool  
         //// || : bool x bool -> bool  
43          if (t > 1.0 || rayTransp < 0.01) // a little odd; ray terminates at length=1          if (t > 1.0 || rayTransp < 0.01) // a little odd; ray terminates at length=1
44              stabilize;              stabilize;
45          pos = pos + stepSz*dir;          pos = pos + stepSz*dir;
46          t = t + stepSz;          t = t + stepSz;
47      }      }
48    
   
49  }  }
50    
51    initially [ RayCast(r, c) | r in 0..1023, c in 0..1023 ];

Legend:
Removed from v.86  
changed lines
  Added in v.2402

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