Commit 5f81932bea9ef343eb64fc57009739f83d585684

Authored by David Mayerich
1 parent e843658b

restored Pavel's changes

Showing 2 changed files with 191 additions and 213 deletions   Show diff stats
stim/gl/gl_spider.h
@@ -41,7 +41,7 @@ class gl_spider : public virtual gl_texture<T> @@ -41,7 +41,7 @@ class gl_spider : public virtual gl_texture<T>
41 cudaGraphicsResource_t resource; 41 cudaGraphicsResource_t resource;
42 GLuint fboID; 42 GLuint fboID;
43 GLuint texbufferID; 43 GLuint texbufferID;
44 - int iter = 0; 44 + int iter = 0; //temporary for testing
45 45
46 void 46 void
47 findOptimalPosition() 47 findOptimalPosition()
@@ -185,39 +185,45 @@ class gl_spider : public virtual gl_texture<T> @@ -185,39 +185,45 @@ class gl_spider : public virtual gl_texture<T>
185 } 185 }
186 186
187 void 187 void
188 - Update(float v_x, float v_y, vec<float> dir) 188 + UpdatePlanes(float v_x, float v_y, vec<float> vctr, int type = 0)
189 { 189 {
190 vec<float> Y(1.0,0.0,0.0); 190 vec<float> Y(1.0,0.0,0.0);
191 - if(cos(Y.dot(dir))< 0.087){  
192 - Y[0] = 0.0; Y[1] = 1.0;}  
193 - hor = stim::rect<float>(magnitude, position, dir.norm(),  
194 - ((Y.cross(dir)).cross(dir)).norm());  
195 - ver = stim::rect<float>(magnitude, position, dir.norm(),  
196 - hor.n()); 191 + if(cos(Y.dot(vctr))< 0.087){ Y[0] = 0.0; Y[1] = 1.0;}
  192 + switch(type) {
  193 + case 0:
  194 + hor = stim::rect<float>(magnitude, position, vctr.norm(),
  195 + ((Y.cross(vctr)).cross(vctr)).norm());
  196 + ver = stim::rect<float>(magnitude, position, vctr.norm(),
  197 + hor.n());
  198 + break;
  199 + case 1:
  200 + hor = stim::rect<float>(magnitude, vctr, direction,
  201 + ((Y.cross(direction)).cross(direction)).norm());
  202 + ver = stim::rect<float>(magnitude, vctr, direction,
  203 + hor.n());
  204 + break;
  205 + case 2:
  206 + hor = stim::rect<float>(vctr, position, direction,
  207 + ((Y.cross(direction)).cross(direction)).norm());
  208 + ver = stim::rect<float>(vctr, position, direction,
  209 + hor.n());
  210 + break;
  211 + default:
  212 + std::cout << "unknown case have been passed"
  213 + << std::endl;
  214 + break;
  215 + }
197 UpdateBuffer(v_x, v_y); 216 UpdateBuffer(v_x, v_y);
198 } 217 }
199 -  
200 - 218 +
  219 + /*
  220 + Method for controling the buffer and texture binding in order to properly
  221 + do the render to texture.
  222 + */
201 void 223 void
202 - Sample(vec<float> in = (0,0,1), int numSamples = 1089, int solidAngle = M_PI/2) 224 + Bind(int numSamples = 1089)
203 { 225 {
204 - GenerateFBO(20, numSamples*10);  
205 -  
206 - ofstream file;  
207 - file.open("samples.txt", std::ios_base::app);  
208 - float samples[numSamples][3]; //Set up the variables  
209 - //necessary for sample generation  
210 - vec<float> d_s = in.cart2sph();  
211 - vec<float> temp;  
212 - int dim = (sqrt(numSamples)-1)/2;  
213 - //std::cout << dim << std::endl;  
214 - float y_0 = 0.0;  
215 - float len = 10.0;  
216 - float p0 = M_PI/3;  
217 - float dt = solidAngle/(1.0 * dim);  
218 - float dp = p0/(1.0*dim);  
219 -  
220 - 226 + float len = 10.0;
221 glBindFramebuffer(GL_FRAMEBUFFER, fboID);//set up GL buffer 227 glBindFramebuffer(GL_FRAMEBUFFER, fboID);//set up GL buffer
222 glFramebufferTexture2D( 228 glFramebufferTexture2D(
223 GL_FRAMEBUFFER, 229 GL_FRAMEBUFFER,
@@ -239,11 +245,45 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -239,11 +245,45 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
239 gluOrtho2D(0.0,2.0*len,0.0,numSamples*len); 245 gluOrtho2D(0.0,2.0*len,0.0,numSamples*len);
240 glEnable(GL_TEXTURE_3D); 246 glEnable(GL_TEXTURE_3D);
241 glBindTexture(GL_TEXTURE_3D, texID); 247 glBindTexture(GL_TEXTURE_3D, texID);
  248 + }
  249 +
  250 + void
  251 + Unbind()
  252 + {
  253 + //Finalize GL_buffer
  254 + glBindTexture(GL_TEXTURE_3D, 0);
  255 + glDisable(GL_TEXTURE_3D);
  256 + glBindFramebuffer(GL_FRAMEBUFFER,0);
  257 + glBindTexture(GL_TEXTURE_2D, 0);
  258 + }
  259 + /*
  260 + Method for populating the buffer with the sampled texture.
  261 + usually uses the default direction vector and then
  262 + */
  263 + void
  264 + sampleDirection(int numSamples = 1089, float solidAngle = M_PI)
  265 + {
242 266
  267 + //ofstream file;
  268 + //file.open("samples.txt", std::ios_base::app);
  269 + float samples[numSamples][3]; //Set up the variables
  270 + //necessary for sample generation
  271 + vec<float> d_s = direction.cart2sph();
  272 + vec<float> temp;
  273 + int dim = (sqrt(numSamples)-1)/2;
  274 + //std::cout << dim << std::endl;
  275 + float y_0 = 0.0;
  276 + float p0 = M_PI/3;
  277 + float dt = solidAngle/(1.0 * dim);
  278 + float dp = p0/(1.0*dim);
  279 +
  280 + Bind();
  281 + //file << "Step: Direction" << "\n";
243 //file << "iteration: " << iter << "\n"; 282 //file << "iteration: " << iter << "\n";
244 //file << "starting pos and dir:" << "[" << position[0] << "," <<position[1] << "," << position[2] << "]" << ":" << "[" << direction[0] << "," << direction[1] << "," << direction[2] << "]\n"; 283 //file << "starting pos and dir:" << "[" << position[0] << "," <<position[1] << "," << position[2] << "]" << ":" << "[" << direction[0] << "," << direction[1] << "," << direction[2] << "]\n";
245 - //Loop over the samples  
246 - file << position[0] << "," <<position[1] << "," << position[2] << "\n"; 284 + //Loop over the samples such that the original orientation is in the
  285 + //center of the resulting texture index (544)
  286 + //file << position[0] << "," <<position[1] << "," << position[2] << "\n";
247 int idx; 287 int idx;
248 for(int i = -dim; i <= dim; i++){ 288 for(int i = -dim; i <= dim; i++){
249 for(int j = -dim; j <= dim; j++){ 289 for(int j = -dim; j <= dim; j++){
@@ -259,28 +299,93 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -259,28 +299,93 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
259 samples[idx][1] = temp[1]; 299 samples[idx][1] = temp[1];
260 samples[idx][2] = temp[2]; 300 samples[idx][2] = temp[2];
261 301
262 - //file << idx << ":" <<"[" << samples[idx][0] << "," << samples[idx][1] << "," << samples[idx][2] << "]" << "\n"; 302 + // file << idx << ":" <<"[" << samples[idx][0] << "," << samples[idx][1] << "," << samples[idx][2] << "]" << "\n";
263 303
264 - Update(0.0, y_0+(idx)*10, temp); 304 + UpdatePlanes(0.0, y_0+(idx)*10, temp);
265 } 305 }
266 } 306 }
267 - //Finalize GL_buffer  
268 - glBindTexture(GL_TEXTURE_3D, 0);  
269 - glDisable(GL_TEXTURE_3D);  
270 - glBindFramebuffer(GL_FRAMEBUFFER,0);  
271 - glBindTexture(GL_TEXTURE_2D, 0); 307 + Unbind();
272 int nxt = getCost(); 308 int nxt = getCost();
273 - stim::vec<float> next;  
274 - next[0] = samples[nxt][0];  
275 - next[1] = samples[nxt][1];  
276 - next[2] = samples[nxt][2]; 309 + stim::vec<float> next(samples[nxt][0], samples[nxt][1], samples[nxt][2]);
  310 + //next[0] = samples[nxt][0];
  311 + //next[1] = samples[nxt][1];
  312 + //next[2] = samples[nxt][2];
277 next.norm(); 313 next.norm();
278 //file << "next direction" << "[" << next[0] << "," << next[1] << "," << next[2] << "]\n\n"; 314 //file << "next direction" << "[" << next[0] << "," << next[1] << "," << next[2] << "]\n\n";
279 - setPosition(position[0] + next[0]/500,  
280 - position[1]+next[1]/500,  
281 - position[2]+next[2]/500); 315 + setPosition(position[0] + next[0]*magnitude[0]/2,
  316 + position[1]+next[1]*magnitude[0]/2,
  317 + position[2]+next[2]*magnitude[0]/2);
282 setDirection(next[0], next[1], next[2]); 318 setDirection(next[0], next[1], next[2]);
283 //file.close(); 319 //file.close();
  320 + setDirection(next);
  321 + //file << "ending pos and dir:" << "[" << position[0] << "," <<position[1] << "," << position[2] << "]" << ":" << "[" << direction[0] << "," << direction[1] << "," << direction[2] << "]\n";
  322 + }
  323 +
  324 + void
  325 + samplePosition(int numSamples = 1089, float delta = 0.2)
  326 + {
  327 +
  328 + float samples[numSamples][3]; //Set up the variables
  329 + vec<float> temp;
  330 + int dim = (sqrt(numSamples)-1)/2;
  331 + float y_0 = 0.0; //location of the first sample in the buffer
  332 + stim::rect<float> samplingPlane =
  333 + stim::rect<float>(magnitude[0]*delta, position, direction);
  334 + float step = 1.0/(dim);
  335 + Bind();
  336 + //Loop over the samples, keeping the original position sample
  337 + //in the center of the resulting texture.
  338 +
  339 + int idx;
  340 + for(int i = -dim; i <= dim; i++){
  341 + for(int j = -dim; j <= dim; j++){
  342 + //Create linear index
  343 + idx = (i+dim)*(dim*2+1) + (j+dim);
  344 +
  345 + temp = samplingPlane.p(
  346 + 0.5+step*i,
  347 + 0.5+step*j
  348 + );
  349 +
  350 + samples[idx][0] = temp[0]; //save sample vector
  351 + samples[idx][1] = temp[1];
  352 + samples[idx][2] = temp[2];
  353 +
  354 + UpdatePlanes(0.0, y_0+(idx)*10, temp, 1);
  355 + }
  356 + }
  357 + Unbind();
  358 + int nxt = getCost();
  359 + setPosition(samples[nxt][0], samples[nxt][1], samples[nxt][2]);
  360 + }
  361 +
  362 + void
  363 + sampleMagnitude(int numSamples = 1089, float delta = 0.5)
  364 + {
  365 +
  366 + ofstream file;
  367 + file.open("samples.txt", std::ios_base::app);
  368 + float samples[numSamples]; //Set up the variables
  369 + int dim = (sqrt(numSamples)-1)/2;
  370 + float y_0 = 0.0; //location of the first sample in the buffer
  371 + float min = 1.0-delta;
  372 + float max = 1.0+delta;
  373 + float step = (max-min)/(numSamples-1);
  374 + float factor;
  375 + vec<float> temp;
  376 + Bind();
  377 +
  378 + for(int i = 0; i < numSamples; i++){
  379 + //Create linear index
  380 + factor = (min+step*i)*magnitude[0];
  381 + samples[i] = factor; //save sample vector
  382 + stim::vec<float> temp(factor);
  383 + UpdatePlanes(0.0, y_0+(i)*10, temp, 2);
  384 + }
  385 + Unbind();
  386 + int nxt = getCost();
  387 + setMagnitude(samples[nxt]);
  388 + file << position[0] << "," <<position[1] << "," << position[2] << "\n";
284 } 389 }
285 390
286 //--------------------------------------------------------------------------// 391 //--------------------------------------------------------------------------//
@@ -328,48 +433,36 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -328,48 +433,36 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
328 stim::rect<float> hor; 433 stim::rect<float> hor;
329 stim::rect<float> ver; 434 stim::rect<float> ver;
330 435
331 - 436 + //Default Constructor
332 gl_spider 437 gl_spider
333 () 438 ()
334 { 439 {
335 setPosition(0.0,0.0,0.0); 440 setPosition(0.0,0.0,0.0);
336 - setDirection(1.0,1.0,1.0);  
337 - setMagnitude(0.1,0.1);  
338 - //GenerateFBO(400,200);  
339 - //Update(); 441 + setDirection(0.0,0.0,1.0);
  442 + setMagnitude(0.03);
340 } 443 }
341 444
342 - gl_spider  
343 - (vec<float> pos, vec<float> dir, vec<float> mag)  
344 - {  
345 - position = pos;  
346 - direction = dir;  
347 - magnitude = mag;  
348 - //GenerateFBO(400,200);  
349 - //Update();  
350 - }  
351 - //temporary cost for convenience. 445 + //temporary constructor for convenience, will be removed in further updates.
352 gl_spider 446 gl_spider
353 (float pos_x, float pos_y, float pos_z, float dir_x, float dir_y, float dir_z, 447 (float pos_x, float pos_y, float pos_z, float dir_x, float dir_y, float dir_z,
354 - float mag_x, float mag_y) 448 + float mag_x)
355 { 449 {
356 setPosition(pos_x, pos_y, pos_z); 450 setPosition(pos_x, pos_y, pos_z);
357 setDirection(dir_x, dir_y, dir_z); 451 setDirection(dir_x, dir_y, dir_z);
358 - setMagnitude(mag_x, mag_y);  
359 - //GenerateFBO(400,200);  
360 - //Update(); 452 + setMagnitude(mag_x);
361 } 453 }
362 454
  455 + //Attached the spider to the texture with the given GLuint ID.
  456 + //Samples in the default direction acting as the init method.
363 void 457 void
364 - attachSpider(GLuint id) 458 + attachSpider(GLuint id, int numSamples = 1089)
365 { 459 {
366 texID = id; 460 texID = id;
367 - Sample(direction);  
368 - //GenerateFBO(20,10000);  
369 - // Update();  
370 - // generateVectorField(direction, 4.0); 461 + GenerateFBO(20, numSamples*10);
  462 + sampleDirection();
371 } 463 }
372 - 464 +
  465 + //temporary Method necessary for visualization and testing.
373 void 466 void
374 Update() 467 Update()
375 { 468 {
@@ -380,35 +473,37 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -380,35 +473,37 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
380 ((Y.cross(direction)).cross(direction)).norm()); 473 ((Y.cross(direction)).cross(direction)).norm());
381 ver = stim::rect<float>(magnitude, position, direction.norm(), 474 ver = stim::rect<float>(magnitude, position, direction.norm(),
382 hor.n()); 475 hor.n());
383 - //UpdateBuffer();  
384 - generateVectorField(direction, 4.0);  
385 } 476 }
386 477
387 - 478 + //Returns the position vector.
388 vec<float> 479 vec<float>
389 getPosition() 480 getPosition()
390 { 481 {
391 return position; 482 return position;
392 } 483 }
393 484
  485 + //Returns the direction vector.
394 vec<float> 486 vec<float>
395 getDirection() 487 getDirection()
396 { 488 {
397 return direction; 489 return direction;
398 } 490 }
399 491
  492 + //Returns the magnitude vector.
400 vec<float> 493 vec<float>
401 getMagnitude() 494 getMagnitude()
402 { 495 {
403 return magnitude; 496 return magnitude;
404 } 497 }
405 498
  499 + //Sets the position vector to input vector pos
406 void 500 void
407 setPosition(vec<float> pos) 501 setPosition(vec<float> pos)
408 { 502 {
409 position = pos; 503 position = pos;
410 } 504 }
411 505
  506 + //Sets the position vector to the input float coordinates x,y,z
412 void 507 void
413 setPosition(float x, float y, float z) 508 setPosition(float x, float y, float z)
414 { 509 {
@@ -417,12 +512,15 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -417,12 +512,15 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
417 position[2] = z; 512 position[2] = z;
418 } 513 }
419 514
  515 +
  516 + //Sets the direction vector to input vector dir
420 void 517 void
421 setDirection(vec<float> dir) 518 setDirection(vec<float> dir)
422 { 519 {
423 direction = dir; 520 direction = dir;
424 } 521 }
425 522
  523 + //Sets the direction vector to the input float coordinates x,y,z
426 void 524 void
427 setDirection(float x, float y, float z) 525 setDirection(float x, float y, float z)
428 { 526 {
@@ -431,19 +529,22 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -431,19 +529,22 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
431 direction[2] = z; 529 direction[2] = z;
432 } 530 }
433 531
  532 + //Sets the magnitude vector to the input vector mag.
434 void 533 void
435 setMagnitude(vec<float> mag) 534 setMagnitude(vec<float> mag)
436 { 535 {
437 - magnitude = mag; 536 + magnitude[0] = mag[0];
  537 + magnitude[1] = mag[0];
438 } 538 }
439 539
440 void 540 void
441 - setMagnitude(float x, float y) 541 + setMagnitude(float mag)
442 { 542 {
443 - magnitude[0] = x;  
444 - magnitude[1] = y; 543 + magnitude[0] = mag;
  544 + magnitude[1] = mag;
445 } 545 }
446 - 546 +
  547 + //temporary method for visualization.
447 GLuint 548 GLuint
448 getFB() 549 getFB()
449 { 550 {
@@ -453,142 +554,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -453,142 +554,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
453 void 554 void
454 Step() 555 Step()
455 { 556 {
456 - std::cout << position[0] << "," << position[1] << "," << position[1]  
457 - << std::endl;  
458 - //setPosition(direction*magnitude[1]/2+position);  
459 findOptimalDirection(); 557 findOptimalDirection();
460 - //Update();  
461 - std::cout << position[0] << "," << position[1] << "," << position[1]  
462 - << std::endl;  
463 -  
464 - }  
465 -  
466 - void  
467 - UpdateBuffer()  
468 - {  
469 - stim::vec<float>p1;  
470 - stim::vec<float>p2;  
471 - stim::vec<float>p3;  
472 - stim::vec<float>p4;  
473 - glBindFramebuffer(GL_FRAMEBUFFER, fboID);  
474 - glFramebufferTexture2D(  
475 - GL_FRAMEBUFFER,  
476 - GL_COLOR_ATTACHMENT0,  
477 - GL_TEXTURE_2D,  
478 - texbufferID,  
479 - 0);  
480 - glBindFramebuffer(GL_FRAMEBUFFER, fboID);  
481 - GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};  
482 - glDrawBuffers(1, DrawBuffers);  
483 - glBindTexture(GL_TEXTURE_2D, texbufferID);  
484 - glClearColor(0,0,0,0);  
485 - glClear(GL_COLOR_BUFFER_BIT);  
486 - glMatrixMode(GL_PROJECTION);  
487 - glLoadIdentity();  
488 - glMatrixMode(GL_MODELVIEW);  
489 - glLoadIdentity();  
490 - glViewport(0,0,400,200);  
491 - gluOrtho2D(0.0,2.0,0.0,2.0);  
492 - glEnable(GL_TEXTURE_3D);  
493 - glBindTexture(GL_TEXTURE_3D, texID);  
494 - p1 = hor.p(1,1);  
495 - p2 = hor.p(1,0);  
496 - p3 = hor.p(0,0);  
497 - p4 = hor.p(0,1);  
498 - glBegin(GL_QUADS);  
499 - glTexCoord3f(  
500 - p1[0],  
501 - p1[1],  
502 - p1[2]  
503 - );  
504 - glVertex2f(0.0,0.0);  
505 - glTexCoord3f(  
506 - p2[0],  
507 - p2[1],  
508 - p2[2]  
509 - );  
510 - glVertex2f(1.0, 0.0);  
511 - glTexCoord3f(  
512 - p3[0],  
513 - p3[1],  
514 - p3[2]  
515 - );  
516 - glVertex2f(1.0, 2.0);  
517 - glTexCoord3f(  
518 - p4[0],  
519 - p4[1],  
520 - p4[2]  
521 - );  
522 - glVertex2f(0.0, 2.0);  
523 - glEnd();  
524 - p1 = ver.p(1,1);  
525 - p2 = ver.p(1,0);  
526 - p3 = ver.p(0,0);  
527 - p4 = ver.p(0,1);  
528 - glBegin(GL_QUADS);  
529 - glTexCoord3f(  
530 - p1[0],  
531 - p1[1],  
532 - p1[2]  
533 - );  
534 - glVertex2f(1.0, 0.0);  
535 - glTexCoord3f(  
536 - p2[0],  
537 - p2[1],  
538 - p2[2]  
539 - );  
540 - glVertex2f(2.0, 0.0);  
541 - glTexCoord3f(  
542 - p3[0],  
543 - p3[1],  
544 - p3[2]  
545 - );  
546 - glVertex2f(2.0, 2.0);  
547 - glTexCoord3f(  
548 - p4[0],  
549 - p4[1],  
550 - p4[2]  
551 - );  
552 - glVertex2f(1.0, 2.0);  
553 - glEnd();  
554 - glBindTexture(GL_TEXTURE_3D, 0);  
555 - glDisable(GL_TEXTURE_3D);  
556 - glBindFramebuffer(GL_FRAMEBUFFER,0);  
557 - glBindTexture(GL_TEXTURE_2D, 0);  
558 } 558 }
559 559
560 -  
561 - void  
562 - generateVectorField(stim::vec<float> d, float dim)  
563 - {  
564 - vec<float> d_s = d.cart2sph();  
565 - vec<float> temp;  
566 - float Dim = (float) dim;  
567 - float y_0 = 0.0;  
568 - float x_0 = 0.0;  
569 - float len = 4.0/(2.0*Dim+1.0);  
570 - float t0 = M_PI/2;  
571 - float p0 = M_PI/3;  
572 - float dt = t0/Dim;  
573 - float dp = p0/Dim;  
574 - for(int i = -dim; i <= dim; i++){  
575 - for(int j = -dim; j <= dim; j++){  
576 - //field[i+dim][j+dim][0] = d[0];  
577 - //field[i+dim][j+dim][1] = d[1]+dt*i;  
578 - //field[i+dim][j+dim][2] = d[2]+dp*j;  
579 - temp[0] = 1;  
580 - temp[1] = d_s[1]+dt*i;  
581 - temp[2] = d_s[2]+dp*j;  
582 - temp = temp.sph2cart();  
583 - Update(x_0+2.0*(i+dim)*len, y_0+(j+dim)*len, temp);  
584 - }  
585 - }  
586 -  
587 - }  
588 -  
589 -  
590 -  
591 -  
592 560
593 void 561 void
594 findOptimalDirection() 562 findOptimalDirection()
@@ -596,7 +564,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -596,7 +564,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
596 /* Method for finding the best direction for the spider. 564 /* Method for finding the best direction for the spider.
597 Uses the camera to rotate. Then Calls Evaluate to find new cost. 565 Uses the camera to rotate. Then Calls Evaluate to find new cost.
598 */ 566 */
599 - Sample(direction); 567 + sampleDirection();
  568 + samplePosition();
  569 + sampleMagnitude();
600 } 570 }
601 571
602 /* Method for initializing the cuda devices, necessary only 572 /* Method for initializing the cuda devices, necessary only
@@ -92,12 +92,20 @@ public: @@ -92,12 +92,20 @@ public:
92 Y = directionY; 92 Y = directionY;
93 } 93 }
94 94
95 - CUDA_CALLABLE rect(vec<T,N> mag, vec<T, N> center, vec<T, N> directionX, vec<T, N> directionY ) 95 + CUDA_CALLABLE rect(T size, vec<T, N> center, vec<T, N> directionX, vec<T, N> directionY )
96 { 96 {
97 C = center; 97 C = center;
98 X = directionX; 98 X = directionX;
99 Y = directionY; 99 Y = directionY;
100 - scale(mag[0], mag[1]); 100 + scale(size);
  101 + }
  102 +
  103 + CUDA_CALLABLE rect(vec<T,N> size, vec<T, N> center, vec<T, N> directionX, vec<T, N> directionY )
  104 + {
  105 + C = center;
  106 + X = directionX;
  107 + Y = directionY;
  108 + scale(size[0], size[1]);
101 } 109 }
102 110
103 CUDA_CALLABLE void scale(T factor1, T factor2){ 111 CUDA_CALLABLE void scale(T factor1, T factor2){