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

SCM Repository

[diderot] Annotation of /trunk/test/MIP/mip.cl
ViewVC logotype

Annotation of /trunk/test/MIP/mip.cl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 191 - (view) (download)

1 : lamonts 177 __kernel void raycast (__global float * img,
2 :     __global float * h1,
3 :     __global float * h2,
4 :     __global float * out,
5 :     float4 orig,
6 :     float4 eyeVector,
7 :     float4 cVec,
8 :     float4 rVec,
9 :     float16 transformMatrix,
10 :     float stepSize,
11 :     int length,
12 :     int width)
13 :     {
14 :     int row = get_global_id(0), col = get_global_id(1);
15 :    
16 :     if(row < 200 && col < 200)
17 :     {
18 :     int i;
19 :     float t,x,y,z,probedVal, maxValue = -INFINITY;
20 :     float4 t_i, t_j, t_k, value, f, imgPt, pt, v;
21 : lamonts 191 int4 n1;
22 :     int4 n;
23 :    
24 : lamonts 177
25 :    
26 :     float4 d = (float4) (h2[0],h1[0],h1[0],h2[0]);
27 :     float4 c = (float4) (h2[1],h1[1],h1[1],h2[1]);
28 :     float4 b = (float4) (h2[2],h1[2],h1[2],h2[2]);
29 :     float4 a = (float4) (h2[3],h1[3],h1[3],h2[3]);
30 :    
31 :     float4 pos = orig + (float)row * rVec + (float)col * cVec;
32 :     float4 dir = (pos - eyeVector) / fabs(pos - eyeVector);
33 :    
34 :     pt.w = 1.0f;
35 :     pos.w = 1.0f;
36 :     dir.w = 1.0f;
37 :     value.w = 1.0f;
38 : lamonts 191
39 : lamonts 177 for(t = 0.0; t < 20; t+= stepSize)
40 :     {
41 :    
42 :     pos = pos + stepSize * dir;
43 :    
44 :     // Begin Probe Operation
45 :    
46 :     // Transform the value to image space position.
47 :     imgPt = (float4) (dot(pos,transformMatrix.s0123),
48 :     dot(pos,transformMatrix.s4567),
49 :     dot(pos,transformMatrix.s89ab),
50 :     dot(pos,transformMatrix.scdef));
51 :    
52 : lamonts 191
53 : lamonts 177
54 :     f.xyzw = (float4) (modf(imgPt.x,&x),modf(imgPt.y,&y),modf(imgPt.z,&z),1.0f);
55 : lamonts 191 n1 = (int4) ((int)x,(int)y,(int)z,1.0f);
56 : lamonts 177
57 : lamonts 191 if( (n1.x > 1 && n1.x < 11) &&
58 :     (n1.y > 1 && n1.y < 12) &&
59 :     (n1.z > 1 && n1.z < 14))
60 :     {
61 : lamonts 177
62 :    
63 : lamonts 191 // the t value for h(fx - i)
64 :     t_i = (float4) (-1.0-f.x, -f.x,f.x - 1.0, f.x - 2.0);
65 :    
66 :     // the t value for h(fy - j)
67 :     t_j = (float4) (-1.0-f.y, -f.y, f.y - 1.0,f.y - 2.0);
68 :    
69 :     // the t value for h(fx - k)
70 :     t_k = (float4) (-1.0-f.z, -f.z, f.z - 1.0,f.z - 2.0);
71 :    
72 : lamonts 177
73 : lamonts 191 value = ( (d + t_i * (c + t_i * (b + t_i * a))) * // h(fx - i) *
74 :     (d + t_j * (c + t_j * (b + t_j * a))) * // h(fy - j) *
75 :     (d + t_k * (c + t_k * (b + t_k * a)))); // h(fz - k)
76 : lamonts 177
77 :    
78 : lamonts 191 n = (int4) (((n1.x-1) * length * width + n1.y-1 * width + n1.z-1),
79 :     (n1.x * length * width + n1.y * width + n1.z),
80 :     ((n1.x+1) * length * width + n1.y+1 * width + n1.z+1),
81 :     ((n1.x+2) * length * width + n1.y+2 * width + n1.z+2));
82 :    
83 :    
84 :     v = (float4)(img[n.x],
85 :     img[n.y],
86 :     img[n.z],
87 :     img[n.w]);
88 :    
89 :    
90 :     probedVal = dot(v,value); // V(n + <i,j,k>) * summations of the h(x) components
91 :    
92 :     // End Probe Operation
93 :    
94 :     if(maxValue < probedVal)
95 :     maxValue = probedVal;
96 :     }
97 :     if(row == 0 && col == 0)
98 :     printf("IMG PT (%f,%f,%f)\n", imgPt.x,imgPt.y,imgPt.z );
99 :     }
100 :     out[row * 200 + col] = maxValue;
101 : lamonts 177 }
102 :     }

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