Blame view

stim/gl/gl_spider.h 13.6 KB
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
1
2
3
  #ifndef STIM_GL_SPIDER_H
  #define STIM_GL_SPIDER_H
  
a9b45efe   Pavel Govyadinov   changes to spider
4
  #include <GL/glew.h>
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
5
  #include <GL/glut.h>
a9b45efe   Pavel Govyadinov   changes to spider
6
7
8
  #include <cuda.h>
  #include <cuda_gl_interop.h>
  #include <cudaGL.h>
1a456186   Pavel Govyadinov   Added directional...
9
  #include <math.h>
42145f38   Pavel Govyadinov   Fixed the issues ...
10
  #include "../gl/gl_texture.h"
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
11
12
13
  #include "../visualization/camera.h"
  #include "./error.h"
  #include "../math/vector.h"
4cefeb6d   Pavel Govyadinov   Changes to the re...
14
  #include "../math/rect.h"
a9b45efe   Pavel Govyadinov   changes to spider
15
16
  #include "../cuda/cost.h"
  #include "../cuda/glbind.h"
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
17
  
42145f38   Pavel Govyadinov   Fixed the issues ...
18
19
20
  #include <iostream>
  #include <fstream>
  
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
21
22
23
24
25
26
27
  namespace stim
  {
  
  template<typename T>
  class gl_spider : public virtual gl_texture<T>
  {
  	//doen't use gl_texture really, just needs the GLuint id.
4cefeb6d   Pavel Govyadinov   Changes to the re...
28
  	//doesn't even need the texture iD really.
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
29
  	private:
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
30
31
32
33
  		stim::vec<float> position;  	//vector designating the position of the spider.
  		stim::vec<float> direction;	//vector designating the orientation of the spider
  						//always a unit vector.
  		stim::vec<float> magnitude;	//magnitude of the direction vector.
4cefeb6d   Pavel Govyadinov   Changes to the re...
34
35
  						//mag[0] = length.
  						//mag[1] = width.
4cefeb6d   Pavel Govyadinov   Changes to the re...
36
  		using gl_texture<T>::texID;
32c433c7   Pavel Govyadinov   recovered the maj...
37
  		//using image_stack<T>::S;
a9b45efe   Pavel Govyadinov   changes to spider
38
39
40
41
42
43
  		cudaArray* c_Array;
  		//void** devPtr;
  		//size_t size;
  		cudaGraphicsResource_t resource;
  		GLuint fboID;
  		GLuint texbufferID;
e843658b   Brad Deutsch   Previous push did...
44
  		int iter = 0;
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  
  		void
  		findOptimalPosition()
  		{
  			/* Method for finding the best direction for the spider.
  			   Not sure if necessary since the next position for the spider
  			   will be at direction * magnitude. */
  		}
  	
  		void
  		findOptimalScale()
  		{
  			/* Method for finding the best scale for the spider.
  			   changes the x, y, z size of the spider to minimize the cost
  			   function. */
  		}
  
  		void
  		Evaluate()
  		{	
  			/* Uses uniform sampler2D in order to take a difference between
  			   the colors of two textures. 1st texture is the spider template,
  			   the 2nd is the location of the spider's overlap with the
  			   gl_template 
  	
  			   does the spider need to track it's location? Prob not since
  			   position can be set with gl_texture coordinates */
  		
  		}
a9b45efe   Pavel Govyadinov   changes to spider
74
  		
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
75
76
77
78
79
  		void
  		Optimize()
  		{
  			/*find the optimum direction and scale */ 
  		}
13c2a7d4   Pavel Govyadinov   some changes to t...
80
  		/*
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
81
82
83
  		void
  		Step()
  		{
13c2a7d4   Pavel Govyadinov   some changes to t...
84
  			// move to the new position 
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
85
  		}
13c2a7d4   Pavel Govyadinov   some changes to t...
86
  		*/
a9f956be   Pavel Govyadinov   Fixed the cost fu...
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  		
  		void
  		GenerateFBO(unsigned int width, unsigned int height)
  		{
  			glGenFramebuffers(1, &fboID);
  			glBindFramebuffer(GL_FRAMEBUFFER, fboID);
  			int numChannels = 1;
  			unsigned char* texels = new unsigned char[width * height * numChannels];
  			glGenTextures(1, &texbufferID);
  			glBindTexture(GL_TEXTURE_2D, texbufferID);
  			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  			glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
  				 width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, texels);   
  			delete[] texels;
  			glBindFramebuffer(GL_FRAMEBUFFER, 0); 
  			glBindTexture(GL_TEXTURE_2D, 0);
  		}
  
  		void
  		UpdateBuffer(float v_x, float v_y)
  		{	
  			//std::cout << v_y << std::endl;
  			float len = 10.0;
  			stim::vec<float>p1; 
          	        stim::vec<float>p2; 
  	                stim::vec<float>p3; 
                  	stim::vec<float>p4;	
  			p1 = hor.p(1,1);
  			p2 = hor.p(1,0);
  			p3 = hor.p(0,0);
  			p4 = hor.p(0,1);
  			glBegin(GL_QUADS);
  				glTexCoord3f(
  					p1[0],
  					p1[1],
  					p1[2]
  					);
  				//glVertex2f(0.0,0.0);
  				glVertex2f(v_x,v_y);
  				glTexCoord3f(
  					p2[0],
  					p2[1],
  					p2[2]
  					);
  				//glVertex2f(1.0, 0.0);
  				glVertex2f(v_x+len, v_y);
  				glTexCoord3f(
  					p3[0],
  					p3[1],
  					p3[2]
  					);
  				//glVertex2f(1.0, 2.0);
  				glVertex2f(v_x+len, v_y+len);
  				glTexCoord3f(
  					p4[0],
  					p4[1],
  					p4[2]
  					);
  				//glVertex2f(0.0, 2.0);
  				glVertex2f(v_x, v_y+len);
  			 glEnd();
  			 p1 = ver.p(1,1);
  			 p2 = ver.p(1,0);
  			 p3 = ver.p(0,0);
  			 p4 = ver.p(0,1);
  		 	 glBegin(GL_QUADS);
  				glTexCoord3f(
  					p1[0],
  					p1[1],
  					p1[2]
  					);
  				//glVertex2f(1.0, 0.0);
  				glVertex2f(v_x+len, v_y);
  				glTexCoord3f(
  					p2[0],
  					p2[1],
  					p2[2]
  					);
  				//glVertex2f(2.0, 0.0);
  				glVertex2f(v_x+2*len, v_y);
  				glTexCoord3f(
  					p3[0],
  					p3[1],
  					p3[2]
  					);
  				//glVertex2f(2.0, 2.0);
  				glVertex2f(v_x+2*len, v_y+len);
  				glTexCoord3f(
  					p4[0],
  					p4[1],
  					p4[2]
  					);
  				//glVertex2f(1.0, 2.0);
  				glVertex2f(v_x+len, v_y+len);
  			glEnd();
  		}
  
  		void
e843658b   Brad Deutsch   Previous push did...
188
  		Update(float v_x, float v_y, vec<float> dir)
a9f956be   Pavel Govyadinov   Fixed the cost fu...
189
190
  		{
  			vec<float> Y(1.0,0.0,0.0);
e843658b   Brad Deutsch   Previous push did...
191
192
193
194
195
196
  			if(cos(Y.dot(dir))< 0.087){
  				Y[0] = 0.0; Y[1] = 1.0;}
  			hor = stim::rect<float>(magnitude, position, dir.norm(),
  				((Y.cross(dir)).cross(dir)).norm());
  			ver = stim::rect<float>(magnitude, position, dir.norm(),
  				 hor.n());
a9f956be   Pavel Govyadinov   Fixed the cost fu...
197
198
  			UpdateBuffer(v_x, v_y);
  		}
e843658b   Brad Deutsch   Previous push did...
199
200
  
  
a9f956be   Pavel Govyadinov   Fixed the cost fu...
201
  		void
e843658b   Brad Deutsch   Previous push did...
202
  		Sample(vec<float> in = (0,0,1), int numSamples = 1089, int solidAngle = M_PI/2)
a9f956be   Pavel Govyadinov   Fixed the cost fu...
203
  		{
e843658b   Brad Deutsch   Previous push did...
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
  			GenerateFBO(20, numSamples*10);
  
  			ofstream file;
  			file.open("samples.txt", std::ios_base::app);
  			float samples[numSamples][3];    	//Set up the variables
  							 	//necessary for sample generation
  			vec<float> d_s = in.cart2sph();
  			vec<float> temp;
  			int dim = (sqrt(numSamples)-1)/2;
  			//std::cout << dim << std::endl;
  			float y_0 	= 0.0;
  			float len 	= 10.0;
  			float p0  	= M_PI/3;
  			float dt  	= solidAngle/(1.0 * dim);
  			float dp  	= p0/(1.0*dim);
  	
  			
a9f956be   Pavel Govyadinov   Fixed the cost fu...
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
  			glBindFramebuffer(GL_FRAMEBUFFER, fboID);//set up GL buffer		
  			glFramebufferTexture2D(
  				GL_FRAMEBUFFER,
  				GL_COLOR_ATTACHMENT0,
  				GL_TEXTURE_2D,
  				texbufferID,
  				0);
  			glBindFramebuffer(GL_FRAMEBUFFER, fboID);
  			GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
  			glDrawBuffers(1, DrawBuffers);
  			glBindTexture(GL_TEXTURE_2D, texbufferID);
  			glClearColor(0,0,0,0);
  			glClear(GL_COLOR_BUFFER_BIT);
  			glMatrixMode(GL_PROJECTION);
  			glLoadIdentity();
  			glMatrixMode(GL_MODELVIEW);
  			glLoadIdentity();
  			glViewport(0,0,2.0*len, numSamples*len);
  			gluOrtho2D(0.0,2.0*len,0.0,numSamples*len);
  			glEnable(GL_TEXTURE_3D);
  			glBindTexture(GL_TEXTURE_3D, texID);
a9f956be   Pavel Govyadinov   Fixed the cost fu...
242
  			
42145f38   Pavel Govyadinov   Fixed the issues ...
243
244
  			//file << "iteration: " << iter << "\n";
  			//file << "starting pos and dir:" << "[" << position[0] << "," <<position[1] << "," << position[2] << "]" << ":" << "["  << direction[0] << "," << direction[1] << "," << direction[2] << "]\n"; 
e843658b   Brad Deutsch   Previous push did...
245
246
  			//Loop over the samples
  			file << position[0] << "," <<position[1] << "," << position[2] << "\n"; 
a9f956be   Pavel Govyadinov   Fixed the cost fu...
247
248
249
250
251
  			int idx;
  			for(int i = -dim; i <= dim; i++){
  				for(int j = -dim; j <= dim; j++){
  					//Create linear index
  					idx = (i+dim)*(dim*2+1) + (j+dim);
a9f956be   Pavel Govyadinov   Fixed the cost fu...
252
  
42145f38   Pavel Govyadinov   Fixed the issues ...
253
  					temp[0] = d_s[0]; 			//rotate vector
a9f956be   Pavel Govyadinov   Fixed the cost fu...
254
255
256
  					temp[1] = d_s[1]+dt*i;
  					temp[2] = d_s[2]+dp*j;
  
42145f38   Pavel Govyadinov   Fixed the issues ...
257
  					temp = (temp.sph2cart()).norm();		//back to cart
a9f956be   Pavel Govyadinov   Fixed the cost fu...
258
259
260
  					samples[idx][0] = temp[0];	//save sample vector
  					samples[idx][1] = temp[1];
  					samples[idx][2] = temp[2];
42145f38   Pavel Govyadinov   Fixed the issues ...
261
  	
e843658b   Brad Deutsch   Previous push did...
262
  					//file << idx << ":"  <<"[" << samples[idx][0] << "," << samples[idx][1] << "," << samples[idx][2] << "]" << "\n";
a9f956be   Pavel Govyadinov   Fixed the cost fu...
263
  
e843658b   Brad Deutsch   Previous push did...
264
  					Update(0.0, y_0+(idx)*10, temp); 
a9f956be   Pavel Govyadinov   Fixed the cost fu...
265
266
  				}
  			}
e843658b   Brad Deutsch   Previous push did...
267
268
269
270
271
  			//Finalize GL_buffer
  			glBindTexture(GL_TEXTURE_3D, 0);                      
  			glDisable(GL_TEXTURE_3D);
  			glBindFramebuffer(GL_FRAMEBUFFER,0);
  			glBindTexture(GL_TEXTURE_2D, 0);
42145f38   Pavel Govyadinov   Fixed the issues ...
272
  			int nxt = getCost();
e843658b   Brad Deutsch   Previous push did...
273
274
275
276
  			stim::vec<float> next;
  			next[0] = samples[nxt][0];
  			next[1] = samples[nxt][1];
  			next[2] = samples[nxt][2];
42145f38   Pavel Govyadinov   Fixed the issues ...
277
278
  			next.norm();	
  			//file << "next direction" << "[" << next[0] << "," << next[1] << "," << next[2] << "]\n\n"; 
e843658b   Brad Deutsch   Previous push did...
279
280
281
  			setPosition(position[0] + next[0]/500,
  					 position[1]+next[1]/500,
  						position[2]+next[2]/500);
42145f38   Pavel Govyadinov   Fixed the issues ...
282
283
  			setDirection(next[0], next[1], next[2]);
  			//file.close();
42145f38   Pavel Govyadinov   Fixed the issues ...
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
  		}
  
  //--------------------------------------------------------------------------//
  //--------------------------------CUDA METHODS------------------------------//
  //--------------------------------------------------------------------------//
  		
  		/* Method for registering the texture with Cuda for shared
  			access */
  		void
  		createResource()
  		{
  			HANDLE_ERROR(
  				cudaGraphicsGLRegisterImage(
  					 &resource,
  				 	texbufferID,
  				 	GL_TEXTURE_2D,
  				 	//CU_GRAPHICS_REGISTER_FLAGS_NONE)
  					cudaGraphicsMapFlagsReadOnly)
  			);
  		} 
  		
  		/* Method for freeing the texture from Cuda for gl access */
  		void
  		destroyResource()
  		{
  			HANDLE_ERROR(
  				cudaGraphicsUnregisterResource(resource)
  			);		
  		}
  
  		/* Entry-point into the cuda code for calculating the cost
  			of a given samples array (in texture form) */
  		int
  		getCost()
  		{
  			createResource();
  			int cost = 	get_cost(resource, iter);
  			destroyResource();
  			iter++;
  			return cost;
a9f956be   Pavel Govyadinov   Fixed the cost fu...
324
325
  		}
  
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
326
  	public:
4cefeb6d   Pavel Govyadinov   Changes to the re...
327
  
13c2a7d4   Pavel Govyadinov   some changes to t...
328
329
330
  		stim::rect<float> hor;
  		stim::rect<float> ver;	
  
e843658b   Brad Deutsch   Previous push did...
331
  
13c2a7d4   Pavel Govyadinov   some changes to t...
332
333
  		gl_spider
  		()
4cefeb6d   Pavel Govyadinov   Changes to the re...
334
335
  		{
  			setPosition(0.0,0.0,0.0);
e843658b   Brad Deutsch   Previous push did...
336
337
338
339
  			setDirection(1.0,1.0,1.0);
  			setMagnitude(0.1,0.1);
  			//GenerateFBO(400,200);
  			//Update();
4cefeb6d   Pavel Govyadinov   Changes to the re...
340
341
  		}
  
e843658b   Brad Deutsch   Previous push did...
342
343
344
345
346
347
348
349
350
351
  		gl_spider
  		(vec<float> pos, vec<float> dir, vec<float> mag)
  		{
  			position = pos;
  			direction = dir;
  			magnitude = mag;
  			//GenerateFBO(400,200);
  			//Update();
  		}
  		//temporary cost for convenience.	
13c2a7d4   Pavel Govyadinov   some changes to t...
352
353
  		gl_spider
  		(float pos_x, float pos_y, float pos_z, float dir_x, float dir_y, float dir_z,
e843658b   Brad Deutsch   Previous push did...
354
  			float mag_x, float mag_y)
13c2a7d4   Pavel Govyadinov   some changes to t...
355
356
357
  		{
  			setPosition(pos_x, pos_y, pos_z);
  			setDirection(dir_x, dir_y, dir_z);
e843658b   Brad Deutsch   Previous push did...
358
359
360
  			setMagnitude(mag_x, mag_y);
  			//GenerateFBO(400,200);
  			//Update();
a9b45efe   Pavel Govyadinov   changes to spider
361
362
  		}
  		
a9b45efe   Pavel Govyadinov   changes to spider
363
  		void
e843658b   Brad Deutsch   Previous push did...
364
  		attachSpider(GLuint id)
a9b45efe   Pavel Govyadinov   changes to spider
365
366
  		{
  			texID = id;
e843658b   Brad Deutsch   Previous push did...
367
368
369
370
  			Sample(direction);
  			//GenerateFBO(20,10000);
  		//	Update();
  		//	generateVectorField(direction, 4.0);
a39577bf   Pavel Govyadinov   Changes to the sp...
371
  		}
e843658b   Brad Deutsch   Previous push did...
372
  
a39577bf   Pavel Govyadinov   Changes to the sp...
373
374
375
  		void
  		Update()
  		{
13c2a7d4   Pavel Govyadinov   some changes to t...
376
377
378
  			vec<float> Y(1.0,0.0,0.0);
  			if(cos(Y.dot(direction))< 0.087){
  				Y[0] = 0.0; Y[1] = 1.0;}
879321c4   Pavel Govyadinov   minor changes
379
380
  			hor = stim::rect<float>(magnitude, position, direction.norm(),
  				((Y.cross(direction)).cross(direction)).norm());
13c2a7d4   Pavel Govyadinov   some changes to t...
381
  			ver = stim::rect<float>(magnitude, position, direction.norm(),
879321c4   Pavel Govyadinov   minor changes
382
  				 hor.n());
e843658b   Brad Deutsch   Previous push did...
383
384
  			//UpdateBuffer();
  			generateVectorField(direction, 4.0);
4cefeb6d   Pavel Govyadinov   Changes to the re...
385
  		}
1a456186   Pavel Govyadinov   Added directional...
386
  
e843658b   Brad Deutsch   Previous push did...
387
  		
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
388
  		vec<float>
a39577bf   Pavel Govyadinov   Changes to the sp...
389
  		getPosition()
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
390
391
392
393
  		{
  			return position;
  		}
  	
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
394
  		vec<float>
a39577bf   Pavel Govyadinov   Changes to the sp...
395
  		getDirection()
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
396
397
398
399
  		{
  			return direction;
  		}
  
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
400
  		vec<float>
a39577bf   Pavel Govyadinov   Changes to the sp...
401
  		getMagnitude()
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
402
403
404
405
  		{
  			return magnitude;
  		}
  	
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
406
407
408
409
410
411
  		void
  		setPosition(vec<float> pos)
  		{
  			position = pos;
  		}
  		
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
412
413
414
415
416
417
418
419
  		void
  		setPosition(float x, float y, float z)
  		{
  			position[0] = x;
  			position[1] = y;
  			position[2] = z;
  		}
  
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
420
421
422
423
424
425
  		void
  		setDirection(vec<float> dir)
  		{
  			direction = dir;
  		}
  		
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
426
427
428
429
430
431
432
433
  		void
  		setDirection(float x, float y, float z)
  		{
  			direction[0] = x;
  			direction[1] = y;
  			direction[2] = z;
  		}
  		
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
434
435
436
  		void
  		setMagnitude(vec<float> mag)
  		{
e843658b   Brad Deutsch   Previous push did...
437
  			magnitude = mag;
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
438
439
440
  		}
  		
  		void
e843658b   Brad Deutsch   Previous push did...
441
  		setMagnitude(float x, float y)
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
442
  		{
e843658b   Brad Deutsch   Previous push did...
443
444
  			magnitude[0] = x;
  			magnitude[1] = y;
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
445
  		}
e843658b   Brad Deutsch   Previous push did...
446
  	
a9b45efe   Pavel Govyadinov   changes to spider
447
448
449
450
451
  		GLuint
  		getFB()
  		{
  			return fboID;
  		}
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
452
  
13c2a7d4   Pavel Govyadinov   some changes to t...
453
454
455
  		void
  		Step()
  		{
e843658b   Brad Deutsch   Previous push did...
456
457
458
  			std::cout << position[0] << "," << position[1] << "," << position[1]
  				<< std::endl;
  			//setPosition(direction*magnitude[1]/2+position);
42145f38   Pavel Govyadinov   Fixed the issues ...
459
  			findOptimalDirection();
e843658b   Brad Deutsch   Previous push did...
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
  			//Update();
  			std::cout << position[0] << "," << position[1] << "," << position[1]
  				<< std::endl;
  			
  		}
  
  		void
  		UpdateBuffer()
  		{	
  			stim::vec<float>p1; 
          	        stim::vec<float>p2; 
  	                stim::vec<float>p3; 
                  	stim::vec<float>p4;	
  			glBindFramebuffer(GL_FRAMEBUFFER, fboID);
  			glFramebufferTexture2D(
  				GL_FRAMEBUFFER,
  				GL_COLOR_ATTACHMENT0,
  				GL_TEXTURE_2D,
  				texbufferID,
  				0);
  			glBindFramebuffer(GL_FRAMEBUFFER, fboID);
  			GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
  			glDrawBuffers(1, DrawBuffers);
  			glBindTexture(GL_TEXTURE_2D, texbufferID);
  			glClearColor(0,0,0,0);
  			glClear(GL_COLOR_BUFFER_BIT);
  			glMatrixMode(GL_PROJECTION);
  			glLoadIdentity();
  			glMatrixMode(GL_MODELVIEW);
  			glLoadIdentity();
  			glViewport(0,0,400,200);
  			gluOrtho2D(0.0,2.0,0.0,2.0);
  			glEnable(GL_TEXTURE_3D);
  			glBindTexture(GL_TEXTURE_3D, texID);
  			p1 = hor.p(1,1);
  			p2 = hor.p(1,0);
  			p3 = hor.p(0,0);
  			p4 = hor.p(0,1);
  			glBegin(GL_QUADS);
  				glTexCoord3f(
  					p1[0],
  					p1[1],
  					p1[2]
  					);
  				glVertex2f(0.0,0.0);
  				glTexCoord3f(
  					p2[0],
  					p2[1],
  					p2[2]
  					);
  				glVertex2f(1.0, 0.0);
  				glTexCoord3f(
  					p3[0],
  					p3[1],
  					p3[2]
  					);
  				glVertex2f(1.0, 2.0);
  				glTexCoord3f(
  					p4[0],
  					p4[1],
  					p4[2]
  					);
  				glVertex2f(0.0, 2.0);
  			 glEnd();
  			 p1 = ver.p(1,1);
  			 p2 = ver.p(1,0);
  			 p3 = ver.p(0,0);
  			 p4 = ver.p(0,1);
  		 	 glBegin(GL_QUADS);
  				glTexCoord3f(
  					p1[0],
  					p1[1],
  					p1[2]
  					);
  				glVertex2f(1.0, 0.0);
  				glTexCoord3f(
  					p2[0],
  					p2[1],
  					p2[2]
  					);
  				glVertex2f(2.0, 0.0);
  				glTexCoord3f(
  					p3[0],
  					p3[1],
  					p3[2]
  					);
  				glVertex2f(2.0, 2.0);
  				glTexCoord3f(
  					p4[0],
  					p4[1],
  					p4[2]
  					);
  				glVertex2f(1.0, 2.0);
  			glEnd();
  			glBindTexture(GL_TEXTURE_3D, 0);                      
  			glDisable(GL_TEXTURE_3D);
  			glBindFramebuffer(GL_FRAMEBUFFER,0);
  			glBindTexture(GL_TEXTURE_2D, 0);
13c2a7d4   Pavel Govyadinov   some changes to t...
558
  		}
a9b45efe   Pavel Govyadinov   changes to spider
559
  
e843658b   Brad Deutsch   Previous push did...
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
  		
  		void
  		generateVectorField(stim::vec<float> d, float dim)
  		{
  			vec<float> d_s = d.cart2sph();
  			vec<float> temp;
  			float Dim 	= (float) dim;
  			float y_0 	= 0.0;
  			float x_0 	= 0.0;
  			float len 	= 4.0/(2.0*Dim+1.0);
  			float t0  	= M_PI/2;
  			float p0  	= M_PI/3;
  			float dt  	= t0/Dim;
  			float dp  	= p0/Dim;
  			for(int i = -dim; i <= dim; i++){
  				for(int j = -dim; j <= dim; j++){
  					//field[i+dim][j+dim][0] = d[0];
  					//field[i+dim][j+dim][1] = d[1]+dt*i;
  					//field[i+dim][j+dim][2] = d[2]+dp*j;
  					temp[0] = 1;
  					temp[1] = d_s[1]+dt*i;
  					temp[2] = d_s[2]+dp*j;
  					temp = temp.sph2cart();
  					Update(x_0+2.0*(i+dim)*len, y_0+(j+dim)*len, temp); 
  				}
  			}
  			
  		}
  		                                                                   
  
  
  
42145f38   Pavel Govyadinov   Fixed the issues ...
592
  
a9b45efe   Pavel Govyadinov   changes to spider
593
  		void
42145f38   Pavel Govyadinov   Fixed the issues ...
594
  		findOptimalDirection()
a9b45efe   Pavel Govyadinov   changes to spider
595
  		{
42145f38   Pavel Govyadinov   Fixed the issues ...
596
597
598
  			/* Method for finding the best direction for the spider.
  			   Uses the camera to rotate. Then Calls Evaluate to find new cost.
  			*/
e843658b   Brad Deutsch   Previous push did...
599
  			Sample(direction);
a9b45efe   Pavel Govyadinov   changes to spider
600
601
  		}
  
42145f38   Pavel Govyadinov   Fixed the issues ...
602
603
604
605
606
607
608
609
610
  		/* Method for initializing the cuda devices, necessary only
  			there are multiple cuda devices */
  		void
  		initCuda()
  		{	
  			//stim::cudaSetDevice();
  			//GLint max;
  			//glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
  			//std::cout << max << std::endl;
a9b45efe   Pavel Govyadinov   changes to spider
611
  		}
4cefeb6d   Pavel Govyadinov   Changes to the re...
612
  };
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
613
614
  }
  #endif