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

SCM Repository

[diderot] Annotation of /branches/charisee_dev/examples/mode/mode-vr.diderot
ViewVC logotype

Annotation of /branches/charisee_dev/examples/mode/mode-vr.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3307 - (view) (download)

1 : cchiw 3276 input real isoval = 0.9;
2 :     input real thick = 0.8;
3 :    
4 :     field#2(3)[3,3] V = c4hexic ⊛ image("slab-c4h-ten9-small.nrrd");
5 :     field#2(3)[3,3] E = V - trace(V)*identity[3]/3;
6 :     field#2(3)[] F = 3*sqrt(6)*det(E/|E|);
7 : cchiw 3307 field#0(1)[3] cmap = tent ⊛ image("diverg-cmap.nrrd");
8 : cchiw 3276
9 :     function vec3 color(vec3 x) = cmap(clamp(-1,1,F(x)/2));
10 :    
11 :     input real refStep = 1;
12 :     input vec3 camEye = [-139.415, 396.62, 451.98];
13 :     input vec3 camAt = [128.432, 126.52, 219.103];
14 :     input vec3 camUp = [-0.0213419, -0.0581629, 0.998079];
15 :     input real camNearAtRel = -107.06;
16 :     input real camFarAtRel = 125.56;
17 :     input real camFOV = 17.16;
18 :     input int iresU = 650;
19 :     input int iresV = 330;
20 :     input real phongKa = 0.3;
21 :     input real phongKd = 0.7;
22 :     input real rayStep = 0.4;
23 :     input vec3 lightVsp = [-2.0, -3.5, -4.0];
24 :     real camDist = |camAt - camEye|;
25 :     real camNear = camNearAtRel + camDist;
26 :     real camFar = camFarAtRel + camDist;
27 :     vec3 camN = normalize(camAt - camEye); // away from eye
28 :     vec3 camU = normalize(camN × camUp); // right
29 :     vec3 camV = camN × camU; // down
30 :     real camVmax = tan(camFOV*π/360)*camDist;
31 :     real camUmax = camVmax*iresU/iresV;
32 :     vec3 light = transpose([camU,camV,camN])•normalize(lightVsp);
33 :    
34 :     function real alpha(real v, real g) = max(clamp(0, 1, 1.3*(1 - |v+isoval|/(g*thick))),
35 :     clamp(0, 1, 1.3*(1 - |v-isoval|/(g*thick))));
36 :    
37 :     strand raycast(int ui, int vi) {
38 :     real rayU = lerp(-camUmax, camUmax, -0.5, ui, iresU-0.5);
39 :     real rayV = lerp(-camVmax, camVmax, -0.5, vi, iresV-0.5);
40 :     real rayN = camNear;
41 :     vec3 rayVec = (camDist*camN + rayU*camU + rayV*camV)/camDist;
42 :     real transp = 1;
43 :     vec3 rgb = [0, 0, 0];
44 :     output vec4 rgba = [0, 0, 0, 0];
45 :     update {
46 :     vec3 x = camEye + rayN*rayVec;
47 :     if (inside(x,V)) {
48 :     real val = 0;
49 :     vec3 grad = [0,0,0];
50 :     val = F(x);
51 :     grad = -∇F(x);
52 :     real a = alpha(val, |grad|);
53 :     if (a > 0) {
54 :     a = 1 - pow(1-a, rayStep*|rayVec|/refStep);
55 :     real depth = lerp(1.1, 0.8, camNear, rayN, camFar);
56 :     real shade = |normalize(grad)•light|;
57 :     rgb += transp*a*depth*(phongKa + phongKd*shade)*color(x);
58 :     transp *= 1 - a;
59 :     }
60 :     }
61 :     if (transp < 0.01) { // early ray termination
62 :     transp = 0;
63 :     stabilize;
64 :     }
65 :     if (rayN > camFar) {
66 :     stabilize;
67 :     }
68 :     rayN = rayN + rayStep;
69 :     }
70 :     stabilize {
71 :     real a = 1-transp;
72 :     if (a > 0) rgba = [rgb[0]/a, rgb[1]/a, rgb[2]/a, a];
73 :     }
74 :     }
75 :     initially [ raycast(ui, vi) | vi in 0..iresV-1, ui in 0..iresU-1 ];

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