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 203 - (view) (download)

1 : lamonts 203 __kernel void raycast ( float * img,
2 :     float * h1,
3 :     float * h2,
4 :     float * out,
5 : lamonts 177 float4 orig,
6 :     float4 eyeVector,
7 :     float4 cVec,
8 :     float4 rVec,
9 :     float16 transformMatrix,
10 :     float stepSize,
11 :     int length,
12 : lamonts 203 int width,
13 :     int height)
14 : lamonts 177 {
15 :     int row = get_global_id(0), col = get_global_id(1);
16 :    
17 :     if(row < 200 && col < 200)
18 :     {
19 :     int i;
20 :     float t,x,y,z,probedVal, maxValue = -INFINITY;
21 :     float4 t_i, t_j, t_k, value, f, imgPt, pt, v;
22 : lamonts 191 int4 n1;
23 :     int4 n;
24 :    
25 : lamonts 177 float4 d = (float4) (h2[0],h1[0],h1[0],h2[0]);
26 :     float4 c = (float4) (h2[1],h1[1],h1[1],h2[1]);
27 :     float4 b = (float4) (h2[2],h1[2],h1[2],h2[2]);
28 :     float4 a = (float4) (h2[3],h1[3],h1[3],h2[3]);
29 :    
30 :     float4 pos = orig + (float)row * rVec + (float)col * cVec;
31 :     float4 dir = (pos - eyeVector) / fabs(pos - eyeVector);
32 : lamonts 203 float4 NSize = (float4) ((float)height,(float)length,(float)width,1.0f);
33 : lamonts 177
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 f.xyzw = (float4) (modf(imgPt.x,&x),modf(imgPt.y,&y),modf(imgPt.z,&z),1.0f);
54 : lamonts 203
55 : lamonts 191 n1 = (int4) ((int)x,(int)y,(int)z,1.0f);
56 : lamonts 177
57 : lamonts 203 if( (imgPt.x > 1 && imgPt.x < NSize.x - 2) &&
58 :     (imgPt.y > 1 && imgPt.y < NSize.y - 2) &&
59 :     (imgPt.z > 1 && imgPt.z < NSize.z - 2))
60 : lamonts 191 {
61 : lamonts 177
62 :    
63 : lamonts 203
64 : lamonts 191 // the t value for h(fx - i)
65 : lamonts 203 t_i = (float4) (-1.0 - f.x, -f.x,f.x - 1.0, f.x - 2.0);
66 : lamonts 191
67 :     // the t value for h(fy - j)
68 : lamonts 203 t_j = (float4) (-1.0 - f.y, -f.y, f.y - 1.0,f.y - 2.0);
69 : lamonts 191
70 :     // the t value for h(fx - k)
71 : lamonts 203 t_k = (float4) (-1.0 - f.z, -f.z, f.z - 1.0,f.z - 2.0);
72 : lamonts 191
73 : lamonts 177
74 : lamonts 191 value = ( (d + t_i * (c + t_i * (b + t_i * a))) * // h(fx - i) *
75 :     (d + t_j * (c + t_j * (b + t_j * a))) * // h(fy - j) *
76 :     (d + t_k * (c + t_k * (b + t_k * a)))); // h(fz - k)
77 : lamonts 177
78 :    
79 : lamonts 191 n = (int4) (((n1.x-1) * length * width + n1.y-1 * width + n1.z-1),
80 :     (n1.x * length * width + n1.y * width + n1.z),
81 :     ((n1.x+1) * length * width + n1.y+1 * width + n1.z+1),
82 :     ((n1.x+2) * length * width + n1.y+2 * width + n1.z+2));
83 :    
84 :    
85 : lamonts 203
86 :     v = (float4)(img[n.x],
87 :     img[n.y],
88 :     img[n.z],
89 :     img[n.w]);
90 : lamonts 191
91 :    
92 :     probedVal = dot(v,value); // V(n + <i,j,k>) * summations of the h(x) components
93 :    
94 : lamonts 203
95 :     // End Probe Operation
96 : lamonts 191 if(maxValue < probedVal)
97 : lamonts 203 maxValue = probedVal;
98 : lamonts 191 }
99 : lamonts 203 }
100 :     if(row == 0 && col == 74)
101 :     printf("Max Value: %f\n", maxValue );
102 : lamonts 191 out[row * 200 + col] = maxValue;
103 : lamonts 177 }
104 :     }

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