SCM Repository
View of /branches/charisee_dev/examples/dti/dti-vr-byhand.diderot
Parent Directory
|
Revision Log
Revision 3313 -
(download)
(annotate)
Sat Oct 17 00:33:40 2015 UTC (6 years, 8 months ago) by cchiw
File size: 2952 byte(s)
Sat Oct 17 00:33:40 2015 UTC (6 years, 8 months ago) by cchiw
File size: 2952 byte(s)
sync files
input real isoval = 0.5; input real thick = 0.8; field#2(3)[3,3] V = bspln3 ⊛ image("tball.nrrd"); field#0(3)[3,3,3] G=∇⊗V; field#2(3)[3] hackRGB = bspln3 ⊛ image("const-curl3d.nrrd"); function vec3 color(vec3 x) = hackRGB(x); vec3 cutVec = [-1,-0.03,0.02]; real cutPos = -1.5; real refStep = 1; input vec3 camEye = [440.499, 66.673, 175.265]; input vec3 camAt = [69.6939, 103.067, 41.4651]; input vec3 camUp = [-0.0808311, 0.0976636, 0.991932]; input real camNearAtRel = -90; input real camFarAtRel = 90; input real camFOV = 17; input int iresU = 520; input int iresV = 370; input real phongKa = 0.3; input real phongKd = 0.7; input real rayStep = 0.4; input vec3 lightVsp = [-2.0, -2.5, -8.0]; real camDist = |camAt - camEye|; real camNear = camNearAtRel + camDist; real camFar = camFarAtRel + camDist; vec3 camN = normalize(camAt - camEye); // away from eye vec3 camU = normalize(camN × camUp); // right vec3 camV = camN × camU; // down real camVmax = tan(camFOV*π/360)*camDist; real camUmax = camVmax*iresU/iresV; vec3 light = transpose([camU,camV,camN])•normalize(lightVsp); function real alpha(real v, real g) = 1.0 if (v > 0) else clamp(0, 1, 1.3*(1 - |v|/(g*thick))); strand raycast(int ui, int vi) { real rayU = lerp(-camUmax, camUmax, -0.5, ui, iresU-0.5); real rayV = lerp(-camVmax, camVmax, -0.5, vi, iresV-0.5); real rayN = camNear; vec3 rayVec = (camDist*camN + rayU*camU + rayV*camV)/camDist; real transp = 1; vec3 rgb = [0, 0, 0]; output vec4 rgba = [0, 0, 0, 0]; update { vec3 x = camEye + rayN*rayVec; if (inside(x,V) && (x - camAt)•normalize(cutVec) > cutPos) { real val = 0; vec3 grad = [0,0,0]; real m=|V(x)|; tensor[3,3,3] g=G(x); tensor[3] t1=(1/2)*(V(x):g+g:V(x))/m; vec3 t2=[g[0,0,0]+g[0,1,1]+g[0,2,2],g[1,0,0]+g[1,1,1]+g[1,2,2],g[2,0,0]+g[2,1,1]+g[2,2,2]]; tensor [3,3] E = V(x) - trace(V(x))*identity[3]/3; tensor[3,3,3] t3= g-t2⊗identity[3]/3; real t4=|E|; tensor [3] t5=(1/2)*(t3:E +E:t3)/(E:E); val=sqrt(3.0/2.0)*t4/m - isoval; vec3 t6 =m*t5; vec3 t7 = t4*t1; grad =sqrt(3.0/2.0)*(t6- t7)/(m*m); real a = alpha(val, |grad|); if (a > 0) { a = 1 - pow(1-a, rayStep); real depth = lerp(1.1, 0.8, camNear, rayN, camFar); real shade = max(0, normalize(grad)•light); vec3 thisrgb = (phongKa + phongKd*shade)*color(x); if ((x - camAt)•normalize(cutVec) < cutPos + 1.1*rayStep) { thisrgb = phongKd*color(x); } rgb += transp*a*depth*thisrgb; transp *= 1 - a; } } if (transp < 0.01) { // early ray termination transp = 0; stabilize; } if (rayN > camFar) { stabilize; } rayN = rayN + rayStep; } stabilize { real a = 1-transp; if (a > 0) rgba = [rgb[0]/a, rgb[1]/a, rgb[2]/a, a]; } } 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 |