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

SCM Repository

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

Annotation of /branches/charisee_dev/examples/canny/vr-ref.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3281 - (view) (download)

1 : cchiw 3281
2 :     // set camera, image, and rendering parameters
3 :     input vec3 camEye = [-1.5015, -3.6392, 5.27097];
4 :     input vec3 camAt = [0, 0, 0]; // [-0.0455194, 0.0129536, -0.0035959];
5 :     input vec3 camUp = [0.00940017, 0.298005, 0.954518];
6 :     input real camNearAtRel = -1.9;
7 :     input real camFarAtRel = 1.9;
8 :     input real camFOV = 20;
9 :     input int iresU = 600;
10 :     input int iresV = 600;
11 :     input real refStep = 0.1;
12 :     input real rayStep = 0.06;
13 :     input vec3 lightVsp = [-2, -3, -4];
14 :     input real phongKa = 0.3;
15 :     input real phongKd = 0.7;
16 :     input real thickness = 0.1;
17 :    
18 :     input real isoval = 1800;
19 :    
20 :     field#4(3)[] V = bspln5 ⊛ image("canny.nrrd");
21 :    
22 :    
23 :     input real gmin = 1; // NOTISO (canny & ref)
24 :    
25 :     // no other fields can be defined in NOTISO NOTCANNY (ref)
26 :    
27 :     // field#1(3)[] S = ∇⊗∇M • D • D; // NOTISO
28 :     // input real smax = -1;// NOTISO
29 :    
30 :     function real alpha(real v, real g) = clamp(0, 1, 1.2*(1 - |v|/(g*thickness)));
31 :     field#0(1)[3] cmap = tent ⊛ image("isobow.nrrd");
32 :     function vec3 color(vec3 x) = cmap(clamp(-3,1,V(x)));
33 :    
34 :     // (boilerplate) computation of camera and light info
35 :     real camDist = |camAt - camEye|;
36 :     real camNear = camNearAtRel + camDist;
37 :     real camFar = camFarAtRel + camDist;
38 :     vec3 camN = normalize(camAt - camEye); // away
39 :     vec3 camU = normalize(camN × camUp); // right
40 :     vec3 camV = camU × camN; // up
41 :     real camVmax = tan(camFOV*π/360)*camDist;
42 :     real camUmax = camVmax*iresU/iresV;
43 :     vec3 light = transpose([camU,camV,camN])•normalize(lightVsp);
44 :    
45 :     strand raycast(int ui, int vi) {
46 :     real rayU = lerp(-camUmax, camUmax, -0.5, ui, iresU-0.5);
47 :     real rayV = lerp(camVmax, -camVmax, -0.5, vi, iresV-0.5);
48 :     real rayN = camNear;
49 :     vec3 rayVec = camN + (rayU*camU + rayV*camV)/camDist;
50 :     real transp = 1;
51 :     vec3 rgb = [0,0,0];
52 :     output vec4 rgba = [0,0,0,0];
53 :    
54 :     update {
55 :     vec3 x = camEye + rayN*rayVec;
56 :     if (inside(x,V) && |∇V(x)| > gmin) { // NOTISO (canny & ref)
57 :    
58 :    
59 :     vec3 g = ∇V(x); // NOTISO NOTCANNY (ref)
60 :     tensor[3,3] H = ∇⊗∇V(x); // NOTISO NOTCANNY (ref)
61 :     tensor[3,3,3] J = ∇⊗∇⊗∇V(x); // NOTISO NOTCANNY (ref)
62 :     real val = g•H•g/|g|; // NOTISO NOTCANNY (ref)
63 :     vec3 grad = (2*H•H•g + g•J•g - (g•H•g)*(H•g)/(g•g))/|g|; // NOTISO NOTCANNY (ref)
64 :    
65 :     real a = alpha(val, |grad|);
66 :     if (a > 0) { // we have some opacity
67 :     a = 1 - pow(1-a, rayStep*|rayVec|/refStep);
68 :     real depth = lerp(1.3, 0.6, camNear, rayN, camFar);
69 :     real shade = max(0, normalize(grad)•light);
70 :     rgb += transp*depth*a*(phongKa + phongKd*shade)*color(x);
71 :     transp *= 1 - a;
72 :     }
73 :     }
74 :     if (transp < 0.01) { // early ray termination
75 :     transp = 0;
76 :     stabilize;
77 :     }
78 :     if (rayN > camFar) {
79 :     stabilize;
80 :     }
81 :     rayN = rayN + rayStep;
82 :     }
83 :     stabilize {
84 :     real a = 1-transp;
85 :     if (a > 0) rgba = [rgb[0]/a, rgb[1]/a, rgb[2]/a, a];
86 :     }
87 :     }
88 :     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