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>
|
556c4e15
Pavel Govyadinov
Changed the handl...
|
10
11
12
|
#include "stim/gl/gl_texture.h"
#include "stim/visualization/camera.h"
#include "stim/gl/error.h"
|
cce7daf9
Pavel Govyadinov
added glObj.h to ...
|
13
|
#include "stim/math/vector.h"
|
556c4e15
Pavel Govyadinov
Changed the handl...
|
14
15
|
#include "stim/math/rect.h"
#include "stim/math/matrix.h"
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
16
|
#include "stim/cuda/spider_cost.cuh"
|
7d1d153a
Pavel Govyadinov
fixed the include...
|
17
|
#include <stim/cuda/cudatools/glbind.h>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
18
19
20
21
|
#include <stim/cuda/arraymath.cuh>
#include <stim/cuda/cudatools.h>
#include <stim/cuda/ivote.cuh>
#include <stim/visualization/glObj.h>
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
22
|
#include <vector>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
23
|
#include <stim/cuda/branch_detection.cuh>
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
24
|
#include "../../../volume-spider/fiber.h"
|
23af8e36
Pavel Govyadinov
modified spider t...
|
25
|
#include "../../../volume-spider/glnetwork.h"
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
26
|
//#include <stim/cuda/testKernel.cuh>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
27
28
|
//#include <stim/cuda/testKernel.cuh>
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
29
|
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
30
31
|
#include <iostream>
#include <fstream>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
32
33
34
35
36
|
#ifdef TESTING
#include <iostream>
#include <cstdio>
#include <ctime>
#endif
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
37
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
38
|
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
39
40
41
42
|
namespace stim
{
template<typename T>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
43
|
class gl_spider : public virtual gl_texture<T>
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
44
45
|
{
//doen't use gl_texture really, just needs the GLuint id.
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
46
|
//doesn't even need the texture iD really.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
47
|
private:
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
48
49
|
//
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
50
51
|
stim::vec<float> p; //vector designating the position of the spider.
stim::vec<float> d; //vector designating the orientation of the spider
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
52
|
//always a unit vector.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
53
|
stim::vec<float> m; //magnitude of the spider vector.
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
54
55
|
//mag[0] = length.
//mag[1] = width.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
56
57
58
59
60
61
|
std::vector<stim::vec<float> > dV; //A list of all the direction vectors.
std::vector<stim::vec<float> > pV; //A list of all the position vectors.
std::vector<stim::vec<float> > mV; //A list of all the size vectors.
stim::matrix<float, 4> cT; //current Transformation matrix
//From tissue space to texture space.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
62
|
GLuint texID;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
63
64
65
66
67
68
69
70
71
|
stim::vec<float> S; //Size of a voxel in the volume.
stim::vec<float> R; //Dimensions of the volume.
//GL and Cuda variables
GLuint dList; //displaylist ID
GLuint fboID; //framebuffer ID
GLuint texbufferID; //texbuffer ID, only necessary for
//cuda aspect of the calculation.
|
6b8621f8
Pavel Govyadinov
stable version
|
72
73
|
GLuint pfboID; //buffer object for position tracking.
GLuint ptexbufferID; //texture object for position tracking.
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
74
|
|
6b8621f8
Pavel Govyadinov
stable version
|
75
76
|
GLuint mfboID; //buffer object for magnitude adjustment.
GLuint mtexbufferID; //texture object for magnitude adjustment.
|
035d798f
Pavel Govyadinov
modified the spid...
|
77
|
GLuint bfboID; //buffer object for position adjustment.
|
6b8621f8
Pavel Govyadinov
stable version
|
78
|
GLuint btexbufferID; //buffer object for position adjustment.
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
79
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
80
|
int numSamples; //The number of templates in the buffer.
|
035d798f
Pavel Govyadinov
modified the spid...
|
81
82
83
84
85
|
int numSamplesPos;
int numSamplesMag;
// float stepsize = 4.0; //Step size.
float stepsize = 3.0; //Step size.
|
6b8621f8
Pavel Govyadinov
stable version
|
86
|
int current_cost; //variable to store the cost of the current step.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
87
88
89
|
//Tracing variables.
|
6b8621f8
Pavel Govyadinov
stable version
|
90
91
92
93
94
95
96
|
std::stack< stim::vec<float> > seeds; //seed positions.
std::stack< stim::vec<float> > seedsvecs; //seed directions.
std::stack< float > seedsmags; //seed magnitudes.
std::vector< stim::vec<float> > cL; //Positions of line currently being traced.
std::vector< stim::vec<float> > cD; //Direction of line currently being traced.
std::vector< stim::vec<float> > cM; //Magnitude of line currently being traced.
|
23af8e36
Pavel Govyadinov
modified spider t...
|
97
|
|
6b8621f8
Pavel Govyadinov
stable version
|
98
99
|
stim::glObj<float> sk; //object to store the skeleton.
stim::glnetwork<float> nt; //object for storing the network.
|
23af8e36
Pavel Govyadinov
modified spider t...
|
100
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
101
102
103
104
105
|
stim::vec<float> rev; //reverse vector;
stim::camera camSel;
stim::vec<float> ps;
stim::vec<float> ups;
stim::vec<float> ds;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
106
107
|
|
6b8621f8
Pavel Govyadinov
stable version
|
108
109
110
111
|
//--------------------------------------------------------------------------//
//-------------------------------PRIVATE METHODS----------------------------//
//--------------------------------------------------------------------------//
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
112
113
114
115
116
117
|
/// Method for finding the best scale for the spider.
/// changes the x, y, z size of the spider to minimize the cost
/// function.
void
findOptimalDirection()
{
|
ac430567
Pavel Govyadinov
comments comments...
|
118
119
|
setMatrix(); //create the transformation matrix.
glCallList(dList); //move the templates to p, d, m.
|
035d798f
Pavel Govyadinov
modified the spid...
|
120
|
int best = getCost(texbufferID,numSamples); //find min cost.
|
ac430567
Pavel Govyadinov
comments comments...
|
121
|
stim::vec<float> next( //find next vector.
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
122
123
124
|
dV[best][0]*S[0]*R[0],
dV[best][1]*S[1]*R[1],
dV[best][2]*S[2]*R[2],
|
d4721000
Pavel Govyadinov
changes with debu...
|
125
|
0);
|
ac430567
Pavel Govyadinov
comments comments...
|
126
|
next = (cT*next).norm(); //find next vector.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
127
128
129
|
setPosition( p[0]+next[0]*m[0]/stepsize,
p[1]+next[1]*m[0]/stepsize,
p[2]+next[2]*m[0]/stepsize);
|
556c4e15
Pavel Govyadinov
Changed the handl...
|
130
|
setDirection(next[0], next[1], next[2]);
|
ac430567
Pavel Govyadinov
comments comments...
|
131
|
//move forward and change direction.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
132
133
|
}
|
6b8621f8
Pavel Govyadinov
stable version
|
134
135
|
/// Method for finding the best d (direction) for the spider.
/// Not sure if necessary since the next p (position) for the spider
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
136
|
/// will be at d * m.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
137
138
139
|
void
findOptimalPosition()
{
|
ac430567
Pavel Govyadinov
comments comments...
|
140
141
|
setMatrix(); //create the transformation matrix.
glCallList(dList+1); //move the templates to p, d, m.
|
035d798f
Pavel Govyadinov
modified the spid...
|
142
|
int best = getCost(ptexbufferID, numSamplesPos); //find min cost.
|
3f15dade
Pavel Govyadinov
changed the plane...
|
143
|
std::cerr << best << std::endl;
|
ac430567
Pavel Govyadinov
comments comments...
|
144
|
stim::vec<float> next( //find next position.
|
3f15dade
Pavel Govyadinov
changed the plane...
|
145
146
147
148
|
pV[best][0],
pV[best][1],
pV[best][2],
1);
|
ac430567
Pavel Govyadinov
comments comments...
|
149
|
next = cT*next; //find next position.
|
d4721000
Pavel Govyadinov
changes with debu...
|
150
151
|
setPosition(
next[0]*S[0]*R[0],
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
152
|
next[1]*S[1]*R[1],
|
d4721000
Pavel Govyadinov
changes with debu...
|
153
|
next[2]*S[2]*R[2]
|
ac430567
Pavel Govyadinov
comments comments...
|
154
|
); //adjust position.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
155
156
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
157
158
159
|
/// Method for finding the best scale for the spider.
/// changes the x, y, z size of the spider to minimize the cost
/// function. */
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
160
161
162
|
void
findOptimalScale()
{
|
ac430567
Pavel Govyadinov
comments comments...
|
163
164
|
setMatrix(); //create the transformation.
glCallList(dList+2); //move the templates to p, d, m.
|
035d798f
Pavel Govyadinov
modified the spid...
|
165
|
int best = getCost(mtexbufferID, numSamplesMag); //get best cost.
|
ac430567
Pavel Govyadinov
comments comments...
|
166
|
setMagnitude(m[0]*mV[best][0]); //adjust the magnitude.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
167
168
|
}
|
6b8621f8
Pavel Govyadinov
stable version
|
169
|
|
ac430567
Pavel Govyadinov
comments comments...
|
170
171
|
///subject to change.
///finds branches.
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
172
173
174
|
void
branchDetection()
{
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
175
|
setMatrix();
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
176
|
glCallList(dList+3);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
177
178
|
std::vector< stim::vec<float> > result = find_branch(
btexbufferID, GL_TEXTURE_2D, 16, 216);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
179
|
stim::vec<float> size(S[0]*R[0], S[1]*R[1], S[2]*R[2]);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
180
181
182
183
|
if(!result.empty())
{
for(int i = 1; i < result.size(); i++)
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
184
185
186
187
188
|
stim::vec<float> cylp(
0.5 * cos(2*M_PI*(result[i][1])),
0.5 * sin(2*M_PI*(result[i][1])),
result[i][0]-0.5,
1.0);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
189
|
cylp = cT*cylp;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
190
|
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
191
192
|
stim::vec<float> vec(
cylp[0]*S[0]*R[0],
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
193
194
|
cylp[1]*S[1]*R[1],
cylp[2]*S[2]*R[2]);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
195
196
197
198
|
stim::vec<float> seeddir(-p[0] + cylp[0]*S[0]*R[0],
-p[1] + cylp[1]*S[1]*R[1],
-p[2] + cylp[2]*S[2]*R[2]);
seeddir = seeddir.norm();
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
199
200
|
// float seedm = m[0]/2.0;
float seedm = m[0];
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
201
202
|
// Uncomment for global run
/* stim::vec<float> lSeed = getLastSeed();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
203
204
205
|
if(sqrt(pow((lSeed[0] - vec[0]),2)
+ pow((lSeed[1] - vec[1]),2) +
pow((lSeed[2] - vec[2]),2)) > m[0]/4.0
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
206
|
&& */
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
207
|
if(
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
208
209
210
211
212
213
|
!(vec[0] > size[0] || vec[1] > size[1]
|| vec[2] > size[2] || vec[0] < 0
|| vec[1] < 0 || vec[2] < 0))
{
setSeed(vec);
setSeedVec(seeddir);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
214
|
setSeedMag(seedm);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
215
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
216
217
|
}
}
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
218
219
220
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
221
222
223
224
225
226
227
|
//--------------------------------------------------------------------------//
//---------------------TEMPLATE CREATION METHODS----------------------------//
//--------------------------------------------------------------------------//
///@param solidAngle, the size of the arc to sample.
///Method for populating the vector arrays with sampled vectors.
|
6b8621f8
Pavel Govyadinov
stable version
|
228
229
230
|
///Objects created are rectangles the with the created directions.
///All points are sampled from a texture.
///Stored in a display list.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
231
|
///uses the default d vector <0,0,1>
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
232
|
void
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
233
|
genDirectionVectors(float solidAngle = 5/M_PI*4)
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
234
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
235
|
//Set up the vectors necessary for Rectangle creation.
|
ac430567
Pavel Govyadinov
comments comments...
|
236
|
vec<float> Y(1.0,0.0,0.0); //orthogonal vec.
|
22e7d0c5
Pavel Govyadinov
Minor changes in ...
|
237
238
239
240
|
vec<float> pos(0.0,0.0,0.0);
vec<float> mag(1.0, 1.0, 1.0);
vec<float> dir(0.0, 0.0, 1.0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
241
242
|
//Set up the variable necessary for vector creation.
vec<float> d_s = d.cart2sph().norm();
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
243
|
vec<float> temp(0,0,0);
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
244
|
int dim = (sqrt(numSamples)-1)/2;
|
ac430567
Pavel Govyadinov
comments comments...
|
245
246
247
|
float p0 = -M_PI; //phi angle in spherical coordinates.
float dt = solidAngle/(2.0 * ((float)dim + 1.0)); //step size in Theta.
float dp = p0/(2.0*((float)dim + 1.0)); //step size in Phi.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
248
|
|
ac430567
Pavel Govyadinov
comments comments...
|
249
250
|
glNewList(dList, GL_COMPILE);
//Loop over the above defined space creating distinct vectors.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
251
|
int idx = 0;
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
252
253
|
for(int i = -dim; i <= dim; i++){
for(int j = -dim; j <= dim; j++){
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
254
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
255
|
//Create linear index
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
256
|
idx = (j+dim)+(i+dim)*((dim*2)+1);
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
257
|
temp[0] = d_s[0]; //rotate vector
|
25580fe7
Pavel Govyadinov
minor bug fix in ...
|
258
259
|
temp[1] = d_s[1]+dp*(float) i;
temp[2] = d_s[2]+dt*(float) j;
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
260
261
|
temp = (temp.sph2cart()).norm(); //back to cart
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
262
263
264
265
266
267
268
269
270
271
|
dV.push_back(temp);
if(cos(Y.dot(temp))< 0.087){ Y[0] = 0.0; Y[1] = 1.0;}
else{Y[0] = 1.0; Y[1] = 0.0;}
hor = stim::rect<float>(mag,
pos, temp,
((Y.cross(temp)).cross(temp)).norm());
ver = stim::rect<float>(mag,
pos, temp,
hor.n());
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
272
|
UpdateBuffer(0.0, 0.0+idx*8.0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
273
|
CHECK_OPENGL_ERROR
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
274
275
|
}
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
276
|
glEndList();
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
277
|
}
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
278
|
|
ac430567
Pavel Govyadinov
comments comments...
|
279
|
///@param float delta, How much the rectangles vary in position.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
280
|
///Method for populating the buffer with the sampled texture.
|
ac430567
Pavel Govyadinov
comments comments...
|
281
282
283
|
///Objects created are rectangles the with the created positions.
///All points are sampled from a texture.
///Stored in a display list.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
284
|
///uses the default vector <0,0,0>
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
285
|
void
|
4191c034
Pavel Govyadinov
minor:bug fixes. ...
|
286
|
genPositionVectors(float delta = 0.4)
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
287
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
288
|
//Set up the vectors necessary for Rectangle creation.
|
ac430567
Pavel Govyadinov
comments comments...
|
289
|
vec<float> Y(1.0,0.0,0.0); //orthogonal vec.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
290
291
292
293
294
|
vec<float> pos(0.0,0.0,0.0);
vec<float> mag(1.0, 1.0, 1.0);
vec<float> dir(0.0, 0.0, 1.0);
//Set up the variable necessary for vector creation.
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
295
|
vec<float> temp(0,0,0);
|
035d798f
Pavel Govyadinov
modified the spid...
|
296
|
int dim = (sqrt(numSamplesPos)-1)/2; //number of position vectors.
|
ac430567
Pavel Govyadinov
comments comments...
|
297
|
stim::rect<float> samplingPlane = //plane from which we pull position samples
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
298
|
stim::rect<float>(p, d);
|
d4721000
Pavel Govyadinov
changes with debu...
|
299
|
samplingPlane.scale(mag[0]*delta, mag[0]*delta);
|
ac430567
Pavel Govyadinov
comments comments...
|
300
|
float step = 1.0/(dim); //step size.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
301
|
|
ac430567
Pavel Govyadinov
comments comments...
|
302
|
//Loop over the samples, keeping the original p samples in the center of the resulting texture to create a large number of position vectors.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
303
304
|
int idx;
glNewList(dList+1, GL_COMPILE);
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
305
306
307
|
for(int i = -dim; i <= dim; i++){
for(int j = -dim; j <= dim; j++){
//Create linear index
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
308
|
idx = (j+dim)+(i+dim)*((dim*2)+1);
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
309
310
311
312
313
|
temp = samplingPlane.p(
0.5+step*i,
0.5+step*j
);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
314
315
316
317
318
319
320
321
|
pV.push_back(temp);
hor = stim::rect<float>(mag,
temp, dir,
((Y.cross(d)).cross(d))
.norm());
ver = stim::rect<float>(mag,
temp, dir,
hor.n());
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
322
|
UpdateBuffer(0.0, 0.0+idx*8.0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
323
|
CHECK_OPENGL_ERROR
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
324
325
|
}
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
326
|
glEndList();
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
327
328
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
329
|
///@param float delta, How much the rectangles are allowed to expand.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
330
|
///Method for populating the buffer with the sampled texture.
|
ac430567
Pavel Govyadinov
comments comments...
|
331
332
333
|
///Objects created are rectangles the with the created sizes.
///All points are sampled from a texture.
///Stored in a display list.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
334
|
///uses the default m <1,1,0>
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
335
|
void
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
336
|
genMagnitudeVectors(float delta = 0.70)
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
337
338
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
339
|
//Set up the vectors necessary for Rectangle creation.
|
ac430567
Pavel Govyadinov
comments comments...
|
340
|
vec<float> Y(1.0,0.0,0.0); //orthogonal vec.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
341
342
343
344
345
|
vec<float> pos(0.0,0.0,0.0);
vec<float> mag(1.0, 1.0, 1.0);
vec<float> dir(0.0, 0.0, 1.0);
//Set up the variable necessary for vector creation.
|
035d798f
Pavel Govyadinov
modified the spid...
|
346
|
int dim = (sqrt(numSamplesMag)-1)/2;
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
347
348
|
float min = 1.0-delta;
float max = 1.0+delta;
|
035d798f
Pavel Govyadinov
modified the spid...
|
349
|
float step = (max-min)/(numSamplesMag-1);
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
350
|
float factor;
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
351
|
vec<float> temp(0.0,0.0,0.0);
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
352
|
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
353
|
glNewList(dList+2, GL_COMPILE);
|
035d798f
Pavel Govyadinov
modified the spid...
|
354
|
for(int i = 0; i < numSamplesMag; i++){
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
355
|
//Create linear index
|
d4721000
Pavel Govyadinov
changes with debu...
|
356
|
factor = (min+step*i)*mag[0];
|
db3c28c9
Pavel Govyadinov
Implemented glDis...
|
357
|
temp = factor;
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
358
359
360
361
362
363
364
365
|
mV.push_back(temp);
hor = stim::rect<float>(temp,
pos, dir,
((Y.cross(d)).cross(d))
.norm());
ver = stim::rect<float>(temp,
pos, dir,
hor.n());
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
366
|
UpdateBuffer(0.0, 0.0+i*8.0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
367
|
CHECK_OPENGL_ERROR
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
368
|
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
369
|
glEndList();
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
370
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
371
372
373
374
375
|
///@param float v_x x-coordinate in buffer-space,
///@param float v_y y-coordinate in buffer-space.
///Samples the texture space.
///places a sample in the provided coordinates of bufferspace.
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
376
377
378
|
void
UpdateBuffer(float v_x, float v_y)
{
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
379
|
float len = 8.0;
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
380
381
382
383
|
stim::vec<float>p1;
stim::vec<float>p2;
stim::vec<float>p3;
stim::vec<float>p4;
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
384
|
p1 = hor.p(1,1);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
385
|
p2 = hor.p(1,0);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
386
|
p3 = hor.p(0,0);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
387
|
p4 = hor.p(0,1);
|
5e7c7581
Pavel Govyadinov
Debugging build f...
|
388
|
glBegin(GL_QUADS);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
389
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
390
391
392
393
|
p1[0],
p1[1],
p1[2]
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
394
395
|
glVertex2f(v_x,v_y);
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
396
397
398
399
|
p2[0],
p2[1],
p2[2]
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
400
401
|
glVertex2f(v_x+len, v_y);
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
402
403
404
405
|
p3[0],
p3[1],
p3[2]
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
406
407
|
glVertex2f(v_x+len, v_y+len);
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
408
409
410
|
p4[0],
p4[1],
p4[2]
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
411
|
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
412
413
|
glVertex2f(v_x, v_y+len);
glEnd();
|
5e7c7581
Pavel Govyadinov
Debugging build f...
|
414
|
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
415
|
p1 = ver.p(1,1);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
416
|
p2 = ver.p(1,0);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
417
|
p3 = ver.p(0,0);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
418
|
p4 = ver.p(0,1);
|
5e7c7581
Pavel Govyadinov
Debugging build f...
|
419
|
glBegin(GL_QUADS);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
420
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
421
422
423
424
|
p1[0],
p1[1],
p1[2]
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
425
426
|
glVertex2f(v_x+len, v_y);
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
427
428
429
430
|
p2[0],
p2[1],
p2[2]
);
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
431
|
glVertex2f(v_x+2.0*len, v_y);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
432
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
433
434
435
436
|
p3[0],
p3[1],
p3[2]
);
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
437
|
glVertex2f(v_x+2.0*len, v_y+len);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
438
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
439
440
441
442
|
p4[0],
p4[1],
p4[2]
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
443
|
glVertex2f(v_x+len, v_y+len);
|
5e7c7581
Pavel Govyadinov
Debugging build f...
|
444
|
glEnd();
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
445
|
}
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
446
|
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
447
|
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
448
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
449
450
451
|
//--------------------------------------------------------------------------//
//--------------------------------GL METHODS--------------------------------//
//--------------------------------------------------------------------------//
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
452
|
|
ac430567
Pavel Govyadinov
comments comments...
|
453
454
455
456
|
///@param uint width sets the width of the buffer.
///@param uint height sets the height of the buffer.
///@param GLuint &textureID gives the texture ID of the texture to be initialized.
///@param GLuint &framebufferID gives the buffer ID of the texture to be initialized.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
457
|
///Function for setting up the 2D buffer that stores the samples.
|
ac430567
Pavel Govyadinov
comments comments...
|
458
|
///Initiates and sets parameters.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
459
|
void
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
460
461
462
463
464
465
466
467
|
GenerateFBO(unsigned int width, unsigned int height, GLuint &textureID, GLuint &framebufferID)
{
glGenFramebuffers(1, &framebufferID);
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID);
int numChannels = 1;
unsigned char* texels = new unsigned char[width * height * numChannels];
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
|
ac430567
Pavel Govyadinov
comments comments...
|
468
469
|
//Textures repeat and use linear interpolation, luminance format.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
470
471
472
473
474
475
476
477
478
|
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);
|
ac430567
Pavel Govyadinov
comments comments...
|
479
|
CHECK_OPENGL_ERROR
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
480
481
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
482
483
|
///@param uint width sets the width of the buffer.
///@param uint height sets the height of the buffer.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
484
485
|
///Function for setting up the 2D buffer that stores the samples.
void
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
486
487
488
489
490
491
492
493
|
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);
|
ac430567
Pavel Govyadinov
comments comments...
|
494
495
|
//Textures repeat and use linear interpolation, luminance format.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
496
497
498
499
500
501
502
503
504
|
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);
|
ac430567
Pavel Govyadinov
comments comments...
|
505
|
CHECK_OPENGL_ERROR
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
506
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
507
|
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
508
|
|
ac430567
Pavel Govyadinov
comments comments...
|
509
|
///Method for using the gl manipulation to align templates from
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
510
|
///Template space (-0.5 0.5) to Texture space (0.0, 1.0),
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
511
|
///Based on the p of the spider in real space (arbitrary).
|
ac430567
Pavel Govyadinov
comments comments...
|
512
|
///All transformation happen in glMatrixMode(GL_TEXTURE).
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
513
|
void setMatrix()
|
5f81932b
David Mayerich
restored Pavel's ...
|
514
|
{
|
ac430567
Pavel Govyadinov
comments comments...
|
515
516
|
float curTrans[16]; //array to store the matrix values.
stim::vec<float> rot = getRotation(d); //get the rotation parameters for the current direction vector.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
517
518
|
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
|
d4721000
Pavel Govyadinov
changes with debu...
|
519
|
|
ac430567
Pavel Govyadinov
comments comments...
|
520
521
522
|
//Scale by the voxel size and number of slices.
glScalef(1.0/S[0]/R[0], 1.0/S[1]/R[1], 1.0/S[2]/R[2]);
//translate to the current position of the spider in the texture.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
523
524
525
|
glTranslatef(p[0],
p[1],
p[2]);
|
ac430567
Pavel Govyadinov
comments comments...
|
526
|
//rotate to the current direction of the spider.
|
d4721000
Pavel Govyadinov
changes with debu...
|
527
|
glRotatef(rot[0], rot[1], rot[2], rot[3]);
|
ac430567
Pavel Govyadinov
comments comments...
|
528
|
//scale to the magnitude of the spider.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
529
|
glScalef(m[0],
|
d4721000
Pavel Govyadinov
changes with debu...
|
530
|
m[0],
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
531
|
m[0]);
|
ac430567
Pavel Govyadinov
comments comments...
|
532
|
//get and store the current transformation matrix for later use.
|
ef64ebad
Pavel Govyadinov
fixed a small mis...
|
533
534
|
glGetFloatv(GL_TEXTURE_MATRIX, curTrans);
cT.set(curTrans);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
535
|
// printTransform();
|
556c4e15
Pavel Govyadinov
Changed the handl...
|
536
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
537
|
CHECK_OPENGL_ERROR
|
ac430567
Pavel Govyadinov
comments comments...
|
538
|
//revert back to default gl mode.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
539
|
glMatrixMode(GL_MODELVIEW);
|
5f81932b
David Mayerich
restored Pavel's ...
|
540
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
541
|
|
ac430567
Pavel Govyadinov
comments comments...
|
542
543
|
///Method for controling the buffer and texture binding.
///Clears the buffer upon binding.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
|
void
Bind()
{
float len = 8.0;
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(1,1,1,1);
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);
CHECK_OPENGL_ERROR
}
|
ac430567
Pavel Govyadinov
comments comments...
|
573
574
575
576
577
|
///Method for controling the buffer and texture binding.
///Clears the buffer upon binding.
///@param GLuint &textureID, texture to be bound.
///@param GLuint &framebufferID, framebuffer used for storage.
///@param int nSamples, number of rectanges to create.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
578
579
580
581
582
|
void
Bind(GLuint &textureID, GLuint &framebufferID, int nSamples)
{
float len = 8.0;
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID);//set up GL buffer
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
583
584
585
586
587
588
|
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
textureID,
0);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
589
|
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
590
591
|
GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1, DrawBuffers);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
592
|
glBindTexture(GL_TEXTURE_2D, textureID);
|
035d798f
Pavel Govyadinov
modified the spid...
|
593
594
|
// glClearColor(1,1,1,1);
// glClear(GL_COLOR_BUFFER_BIT);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
595
596
597
598
599
600
601
602
603
604
605
|
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0,0,2.0*len, nSamples*len);
gluOrtho2D(0.0,2.0*len,0.0,nSamples*len);
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, texID);
CHECK_OPENGL_ERROR
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
606
|
|
ac430567
Pavel Govyadinov
comments comments...
|
607
|
///Unbinds all texture resources.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
608
609
610
611
612
613
614
615
616
617
618
619
620
|
void
Unbind()
{
//Finalize GL_buffer
glBindTexture(GL_TEXTURE_3D, 0);
CHECK_OPENGL_ERROR
glBindTexture(GL_TEXTURE_2D, 0);
CHECK_OPENGL_ERROR
glBindFramebuffer(GL_FRAMEBUFFER, 0);
CHECK_OPENGL_ERROR
glDisable(GL_TEXTURE_3D);
CHECK_OPENGL_ERROR
}
|
ac430567
Pavel Govyadinov
comments comments...
|
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
|
///Makes the spider take a step.
///starting with the current p, d, m, find the next optimal p, d, m.
///Performs the branch detection on each step.
int
StepP()
{
Bind();
CHECK_OPENGL_ERROR
#ifdef TESTING
start = std::clock();
#endif
findOptimalDirection();
findOptimalPosition();
findOptimalScale();
Unbind();
|
035d798f
Pavel Govyadinov
modified the spid...
|
637
|
Bind(btexbufferID, bfboID, 27);
|
ac430567
Pavel Govyadinov
comments comments...
|
638
639
640
641
642
643
644
645
646
647
648
|
branchDetection();
Unbind();
#ifdef TESTING
duration_sampling = duration_sampling +
(std::clock() - start) / (double) CLOCKS_PER_SEC;
num_sampling = num_sampling + 1.0;
#endif
return current_cost;
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
649
|
|
5f81932b
David Mayerich
restored Pavel's ...
|
650
|
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
651
652
653
654
655
|
//--------------------------------------------------------------------------//
//--------------------------------CUDA METHODS------------------------------//
//--------------------------------------------------------------------------//
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
656
|
|
ac430567
Pavel Govyadinov
comments comments...
|
657
658
659
|
///Entry-point into the cuda code for calculating the cost of a given samples array (in texture form)
///finds the minimum cost and sets the current_cost to that value.
/// and returns the index of the template with the minimal cost.
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
660
661
662
|
int
getCost()
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
663
664
665
666
667
|
#ifdef TESTING
start = std::clock();
#endif
stim::vec<int> cost =
stim::cuda::get_cost(texbufferID, GL_TEXTURE_2D, numSamples);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
668
|
cudaDeviceSynchronize();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
669
670
671
672
673
|
#ifdef TESTING
duration_cuda = duration_cuda +
(std::clock() - start) / (double) CLOCKS_PER_SEC;
num_cuda = num_cuda + 1.0;
#endif
|
c4887649
Pavel Govyadinov
fixed a significa...
|
674
|
current_cost = cost[1];
|
edd4ab2d
Pavel Govyadinov
Cleaned up more a...
|
675
|
return cost[0];
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
676
677
|
}
|
035d798f
Pavel Govyadinov
modified the spid...
|
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
|
int
getCost(GLuint tID, int n)
{
#ifdef TESTING
start = std::clock();
#endif
stim::vec<int> cost =
stim::cuda::get_cost(tID, GL_TEXTURE_2D, n);
cudaDeviceSynchronize();
#ifdef TESTING
duration_cuda = duration_cuda +
(std::clock() - start) / (double) CLOCKS_PER_SEC;
num_cuda = num_cuda + 1.0;
#endif
current_cost = cost[1];
return cost[0];
}
|
ac430567
Pavel Govyadinov
comments comments...
|
695
|
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
696
|
public:
|
ac430567
Pavel Govyadinov
comments comments...
|
697
698
699
700
701
702
703
704
705
706
707
708
|
///ininializes the cuda device and environment.
void
initCuda()
{
stim::cudaSetDevice();
//GLint max;
//glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
//std::cout << max << std::endl;
}
//horizonal rectangle forming the spider.
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
709
|
stim::rect<float> hor;
|
ac430567
Pavel Govyadinov
comments comments...
|
710
|
//vectical rectangle forming the spider.
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
711
712
|
stim::rect<float> ver;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
713
714
715
716
717
718
719
720
721
|
//Testing and Timing variables.
#ifdef TESTING
std::clock_t start;
double duration_sampling = 0.0;
double duration_cuda = 0.0;
double num_sampling = 0.0;
double num_cuda = 0.0;
#endif
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
722
723
724
725
726
|
//--------------------------------------------------------------------------//
//-----------------------------CONSTRUCTORS---------------------------------//
//--------------------------------------------------------------------------//
|
ac430567
Pavel Govyadinov
comments comments...
|
727
728
|
///@param int samples, the number of samples this spider is going to use.
///Best results if samples is can create a perfect root.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
729
|
///Default Constructor
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
730
|
gl_spider
|
3f15dade
Pavel Govyadinov
changed the plane...
|
731
|
(int samples = 1089, int samplespos = 441,int samplesmag = 144)
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
732
|
{
|
80d3850d
Pavel Govyadinov
test
|
733
734
735
736
737
|
p = vec<float>(0.0, 0.0, 0.0);
d = vec<float>(0.0, 0.0, 1.0);
m = vec<float>(1.0, 1.0);
S = vec<float>(1.0, 1.0, 1.0);
R = vec<float>(1.0, 1.0, 1.0);
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
738
|
numSamples = samples;
|
035d798f
Pavel Govyadinov
modified the spid...
|
739
740
|
numSamplesPos = samplespos;
numSamplesMag = samplesmag;
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
741
742
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
743
744
745
746
747
748
749
750
751
|
///Position constructor: floats.
///@param float pos_x, position x.
///@param float pos_y, position y.
///@param float pos_z, position z.
///@param float dir_x, direction x.
///@param float dir_y, direction y.
///@param float dir_z, direction z.
///@param float mag_x, size of the vector.
///@param int samples, number of templates this spider is going to use.
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
752
753
|
gl_spider
(float pos_x, float pos_y, float pos_z, float dir_x, float dir_y, float dir_z,
|
3f15dade
Pavel Govyadinov
changed the plane...
|
754
|
float mag_x, int numsamples = 1089, int numsamplespos = 441, int numsamplesmag =144)
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
755
|
{
|
80d3850d
Pavel Govyadinov
test
|
756
757
|
p = vec<float>(pos_x, pos_y, pos_z);
d = vec<float>(dir_x, dir_y, dir_z);
|
d4721000
Pavel Govyadinov
changes with debu...
|
758
|
m = vec<float>(mag_x, mag_x, mag_x);
|
80d3850d
Pavel Govyadinov
test
|
759
760
|
S = vec<float>(1.0,1.0,1.0);
R = vec<float>(1.0,1.0,1.0);
|
035d798f
Pavel Govyadinov
modified the spid...
|
761
762
763
|
numSamples = numsamples;
numSamplesPos = numsamplespos;
numSamplesMag = numsamplesmag;
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
764
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
765
766
767
768
769
770
771
|
///Position constructor: vecs of floats.
///@param stim::vec<float> pos, position.
///@param stim::vec<float> dir, direction.
///@param float mag, size of the vector.
///@param int samples, number of templates this spider is going to use.
gl_spider
|
3f15dade
Pavel Govyadinov
changed the plane...
|
772
|
(stim::vec<float> pos, stim::vec<float> dir, float mag, int samples = 1089, int samplesPos = 441, int samplesMag = 144)
|
ac430567
Pavel Govyadinov
comments comments...
|
773
774
775
776
777
778
779
|
{
p = pos;
d = dir;
m = vec<float>(mag, mag, mag);
S = vec<float>(1.0,1.0,1.0);
R = vec<float>(1.0,1.0,1.0);
numSamples = samples;
|
035d798f
Pavel Govyadinov
modified the spid...
|
780
781
|
numSamplesPos = samplesPos;
numSamplesMag = samplesMag;
|
ac430567
Pavel Govyadinov
comments comments...
|
782
783
784
|
}
///destructor
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
785
786
787
788
789
790
|
~gl_spider
(void)
{
Unbind();
glDeleteTextures(1, &texbufferID);
glDeleteBuffers(1, &fboID);
|
035d798f
Pavel Govyadinov
modified the spid...
|
791
792
|
glDeleteTextures(1, &ptexbufferID);
glDeleteBuffers(1, &pfboID);
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
793
|
glDeleteTextures(1, &mtexbufferID);
|
035d798f
Pavel Govyadinov
modified the spid...
|
794
|
glDeleteBuffers(1, &mfboID);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
795
|
glDeleteTextures(1, &btexbufferID);
|
035d798f
Pavel Govyadinov
modified the spid...
|
796
|
glDeleteBuffers(1, &bfboID);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
797
798
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
799
|
///@param GLuint id, texture that is going to be sampled.
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
800
|
///Attached the spider to the texture with the given GLuint ID.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
801
|
///Samples in the default d acting as the init method.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
802
|
///Also acts an init.
|
a9b45efe
Pavel Govyadinov
changes to spider
|
803
|
void
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
804
|
attachSpider(GLuint id)
|
a9b45efe
Pavel Govyadinov
changes to spider
|
805
806
|
{
texID = id;
|
035d798f
Pavel Govyadinov
modified the spid...
|
807
808
809
810
811
|
//GenerateFBO(16, numSamples*8);
GenerateFBO(16, numSamples*8, texbufferID, fboID);
GenerateFBO(16, numSamplesPos*8, ptexbufferID, pfboID);
GenerateFBO(16, numSamplesMag*8, mtexbufferID, mfboID);
GenerateFBO(16, 216, btexbufferID, bfboID);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
812
813
|
setDims(0.6, 0.6, 1.0);
setSize(512.0, 512.0, 426.0);
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
814
|
setMatrix();
|
db3c28c9
Pavel Govyadinov
Implemented glDis...
|
815
|
dList = glGenLists(3);
|
db3c28c9
Pavel Govyadinov
Implemented glDis...
|
816
|
glListBase(dList);
|
035d798f
Pavel Govyadinov
modified the spid...
|
817
818
|
Bind(texbufferID, fboID, numSamples);
genDirectionVectors(5*M_PI/4);
|
3f15dade
Pavel Govyadinov
changed the plane...
|
819
820
|
Unbind();
Bind(ptexbufferID, pfboID, numSamplesPos);
|
035d798f
Pavel Govyadinov
modified the spid...
|
821
|
genPositionVectors();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
822
|
Unbind();
|
035d798f
Pavel Govyadinov
modified the spid...
|
823
824
|
Bind(mtexbufferID, mfboID, numSamplesMag);
genMagnitudeVectors();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
825
|
Unbind();
|
035d798f
Pavel Govyadinov
modified the spid...
|
826
|
Bind(btexbufferID, bfboID, 27);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
827
|
DrawCylinder();
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
828
|
Unbind();
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
829
|
}
|
5f81932b
David Mayerich
restored Pavel's ...
|
830
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
831
832
833
|
//--------------------------------------------------------------------------//
//-----------------------------ACCESS METHODS-------------------------------//
//--------------------------------------------------------------------------//
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
834
|
///Returns the p vector.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
835
|
vec<float>
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
836
|
getPosition()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
837
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
838
|
return p;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
839
840
|
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
841
|
///Returns the d vector.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
842
|
vec<float>
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
843
|
getDirection()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
844
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
845
|
return d;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
846
847
|
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
848
|
///Returns the m vector.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
849
|
vec<float>
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
850
|
getMagnitude()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
851
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
852
|
return m;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
853
854
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
855
|
///@param stim::vec<float> pos, the new p.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
856
|
///Sets the p vector to input vector pos.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
857
858
859
|
void
setPosition(vec<float> pos)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
860
|
p = pos;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
861
|
}
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
862
|
|
ac430567
Pavel Govyadinov
comments comments...
|
863
864
865
|
///@param float x x-coordinate.
///@param float y y-coordinate.
///@param float z z-coordinate.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
866
|
///Sets the p vector to the input float coordinates x,y,z.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
867
868
869
|
void
setPosition(float x, float y, float z)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
870
871
872
|
p[0] = x;
p[1] = y;
p[2] = z;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
873
|
}
|
887a3e49
Pavel Govyadinov
fixed some order ...
|
874
|
|
ac430567
Pavel Govyadinov
comments comments...
|
875
|
///@param stim::vec<float> dir, the new d.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
876
|
///Sets the d vector to input vector dir.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
877
878
879
|
void
setDirection(vec<float> dir)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
880
|
d = dir;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
881
882
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
883
884
885
|
///@param stim::vec<float> x x-coordinate.
///@param stim::vec<float> y y-coordinate.
///@param stim::vec<float> z z-coordinate.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
886
|
///Sets the d vector to the input float coordinates x,y,z.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
887
888
889
|
void
setDirection(float x, float y, float z)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
890
891
892
|
d[0] = x;
d[1] = y;
d[2] = z;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
893
|
}
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
894
|
|
ac430567
Pavel Govyadinov
comments comments...
|
895
|
///@param stim::vec<float> dir, the new d.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
896
|
///Sets the m vector to the input vector mag.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
897
898
899
|
void
setMagnitude(vec<float> mag)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
900
901
|
m[0] = mag[0];
m[1] = mag[0];
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
902
903
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
904
|
///@param float mag, size of the sampled region.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
905
|
///Sets the m vector to the input mag for both templates.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
906
|
void
|
5f81932b
David Mayerich
restored Pavel's ...
|
907
|
setMagnitude(float mag)
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
908
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
909
910
|
m[0] = mag;
m[1] = mag;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
911
|
}
|
5f81932b
David Mayerich
restored Pavel's ...
|
912
|
|
ac430567
Pavel Govyadinov
comments comments...
|
913
914
915
916
|
///@param float x, voxel size in the x direction.
///@param float y, voxel size in the y direction.
///@param float z, voxel size in the z direction.
///Sets the voxel sizes in each direction. necessary for non-standard data.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
917
918
919
920
921
922
923
924
|
void
setDims(float x, float y, float z)
{
S[0] = x;
S[1] = y;
S[2] = z;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
925
926
927
928
929
930
931
932
933
934
935
936
|
///@param stim::vec<float> Dims, voxel size.
///Sets the voxel sizes in each direction. necessary for non-standard data.
void
setDims(stim::vec<float> Dims)
{
S = Dims;
}
///@param float x, size of the data in the x direction.
///@param float y, size of the data in the y direction.
///@param float z, size of the data in the z direction.
///Sets the data volume sizes in each direction.
|
b710b044
Pavel Govyadinov
Added more tempor...
|
937
|
void
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
938
|
setSize(float x, float y, float z)
|
b710b044
Pavel Govyadinov
Added more tempor...
|
939
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
940
941
942
|
R[0] = x;
R[1] = y;
R[2] = z;
|
b710b044
Pavel Govyadinov
Added more tempor...
|
943
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
944
945
946
947
948
949
950
951
|
///@param stim::vec<float> Dims, size of the volume.
///Sets the data volume sizes in each direction.
void
setSize(stim::vec<float> Siz)
{
S = Siz;
}
|
b710b044
Pavel Govyadinov
Added more tempor...
|
952
|
|
ac430567
Pavel Govyadinov
comments comments...
|
953
954
955
956
|
///@param stim::vec<float> dir, the vector to which we are rotating.
///given a vector to align to, finds the required axis and angle for glRotatef.
///rotates from 0.0, 0.0, 1.0 to dir.
///return is in degrees for use with glRotatef.
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
957
|
stim::vec<float>
|
f304d6de
Pavel Govyadinov
added rotation to...
|
958
959
|
getRotation(stim::vec<float> dir)
{
|
d4721000
Pavel Govyadinov
changes with debu...
|
960
961
962
963
|
stim::vec<float> out(0.0,0.0,0.0,0.0);
stim::vec<float> from(0.0,0.0,1.0);
out[0] = acos(dir.dot(from))*180/M_PI;
if(out[0] < 1.0){
|
f304d6de
Pavel Govyadinov
added rotation to...
|
964
965
966
967
968
|
out[0] = 0.0;
out[1] = 0.0;
out[2] = 0.0;
out[3] = 1.0;
} else {
|
d4721000
Pavel Govyadinov
changes with debu...
|
969
|
stim::vec<float> temp(0.0, 0.0, 0.0);;
|
f304d6de
Pavel Govyadinov
added rotation to...
|
970
971
972
973
974
|
temp = (from.cross(dir)).norm();
out[1] = temp[0];
out[2] = temp[1];
out[3] = temp[2];
}
|
f304d6de
Pavel Govyadinov
added rotation to...
|
975
976
|
return out;
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
977
|
|
ac430567
Pavel Govyadinov
comments comments...
|
978
|
///@param stim::vec<float> pos, the position of the seed to be added.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
979
980
981
982
|
///Adds a seed to the seed list.
///Assumes that the coordinates passes are in tissue space.
void
setSeed(stim::vec<float> pos)
|
a9b45efe
Pavel Govyadinov
changes to spider
|
983
|
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
984
|
seeds.push(pos);
|
a9b45efe
Pavel Govyadinov
changes to spider
|
985
|
}
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
986
|
|
ac430567
Pavel Govyadinov
comments comments...
|
987
988
|
///@param stim::vec<float> dir, the direction of the seed to be added.
///Adds a seed to the seed directions list.
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
989
|
void
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
990
991
992
993
994
|
setSeedVec(stim::vec<float> dir)
{
seedsvecs.push(dir);
}
|
ac430567
Pavel Govyadinov
comments comments...
|
995
996
997
|
///@param float mag, the size of the seed to be added.
///Adds a seed to the seed list.
///Assumes that the coordinates passes are in tissue space.
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
998
999
|
void
setSeedMag(float mag)
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1000
|
{
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1001
|
seedsmags.push(mag);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1002
|
}
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1003
|
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1004
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1005
1006
1007
|
///@param float x, x-position of the seed to be added.
///@param float y, y-position of the seed to be added.
///@param float z, z-position of the seed to be added.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1008
1009
1010
1011
1012
1013
1014
1015
|
///Adds a seed to the seed list.
///Assumes that the coordinates passes are in tissue space.
void
setSeed(float x, float y, float z)
{
seeds.push(stim::vec<float>(x, y, z));
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1016
1017
1018
1019
|
///@param float x, x-direction of the seed to be added.
///@param float y, y-direction of the seed to be added.
///@param float z, z-direction of the seed to be added.
///Adds a seed to the seed directions list.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1020
1021
1022
1023
1024
|
void
setSeedVec(float x, float y, float z)
{
seedsvecs.push(stim::vec<float>(x, y, z));
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1025
1026
|
///Method to get the top of the seed positions stack.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1027
1028
1029
1030
1031
1032
1033
|
stim::vec<float>
getLastSeed()
{
stim::vec<float> tp = seeds.top();
return tp;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1034
|
///Method to get the top of the seed direction stack.
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1035
1036
1037
1038
1039
1040
1041
|
stim::vec<float>
getLastSeedVec()
{
stim::vec<float> tp = seedsvecs.top();
return tp;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1042
|
///Method to get the top of the seed magnitude stack.
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1043
1044
1045
1046
1047
1048
1049
|
float
getLastSeedMag()
{
float tp = seedsmags.top();
return tp;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1050
|
///deletes all data associated with the last seed.
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1051
1052
1053
1054
1055
|
void
popSeed()
{
seeds.pop();
seedsvecs.pop();
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1056
|
seedsmags.pop();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1057
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1058
1059
|
///returns the seeds position stack.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1060
1061
1062
1063
1064
1065
|
std::stack<stim::vec<float> >
getSeeds()
{
return seeds;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1066
|
///returns true if all seed stacks are empty, else false.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1067
1068
1069
|
bool
Empty()
{
|
ac430567
Pavel Govyadinov
comments comments...
|
1070
|
//return (seeds.empty() && seedsvecs.empty() && seedsmags.empty());
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
1071
|
return (seeds.empty() && seedsvecs.empty());
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1072
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1073
1074
1075
|
///@param std::string file:file with variables to populate the seed stacks.
///Adds a seed to the seed list, including the position, direction and magnitude.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
|
///Assumes that the coordinates passes are in tissue space.
void
setSeeds(std::string file)
{
std::ifstream myfile(file.c_str());
string line;
if(myfile.is_open())
{
while (getline(myfile, line))
{
|
ac430567
Pavel Govyadinov
comments comments...
|
1086
1087
1088
1089
1090
|
float x, y, z, u, v, w, m;
myfile >> x >> y >> z >> u >> v >> w >> m;
setSeed(x, y , z);
setSeedVec(u, v, w);
setSeedMag(m);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1091
1092
1093
1094
1095
|
}
myfile.close();
} else {
std::cerr<<"failed" << std::endl;
}
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1096
1097
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1098
|
///Saves the network to a file.
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1099
|
void
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1100
|
saveNetwork(std::string name)
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1101
|
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1102
|
sk.save(name);
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1103
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1104
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1105
|
///returns a COPY of the entire stim::glObj object.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1106
1107
1108
1109
1110
|
stim::glObj<float>
getNetwork()
{
return sk;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1111
1112
1113
1114
1115
1116
1117
|
///returns a COPY of the entire stim::glnetwork object.
stim::glnetwork<T>
getGLNetwork()
{
return nt;
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1118
1119
1120
1121
1122
1123
|
///Function to get back the framebuffer Object attached to the spider.
///For external access.
GLuint
getFB()
{
|
035d798f
Pavel Govyadinov
modified the spid...
|
1124
|
return bfboID;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1125
1126
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
1127
1128
1129
1130
1131
1132
1133
1134
1135
|
//--------------------------------------------------------------------------//
//-----------------------------TEMPORARY METHODS----------------------------//
//--------------------------------------------------------------------------//
///temporary Method necessary for visualization and testing.
void
Update()
{
vec<float> Y(1.0,0.0,0.0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1136
|
if(cos(Y.dot(d))< 0.087){
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
1137
|
Y[0] = 0.0; Y[1] = 1.0;}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1138
1139
1140
|
hor = stim::rect<float>(m, p, d.norm(),
((Y.cross(d)).cross(d)).norm());
ver = stim::rect<float>(m, p, d.norm(),
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
1141
1142
1143
1144
|
hor.n());
}
|
c4887649
Pavel Govyadinov
fixed a significa...
|
1145
|
int
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
1146
1147
|
Step()
{
|
035d798f
Pavel Govyadinov
modified the spid...
|
1148
|
Bind(texbufferID, fboID, numSamples);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1149
1150
1151
1152
|
CHECK_OPENGL_ERROR
#ifdef TESTING
start = std::clock();
#endif
|
035d798f
Pavel Govyadinov
modified the spid...
|
1153
|
findOptimalDirection();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1154
|
Unbind();
|
035d798f
Pavel Govyadinov
modified the spid...
|
1155
1156
|
Bind(ptexbufferID, pfboID, numSamplesPos);
findOptimalPosition();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1157
|
Unbind();
|
035d798f
Pavel Govyadinov
modified the spid...
|
1158
1159
|
Bind(mtexbufferID, mfboID, numSamplesMag);
findOptimalScale();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1160
|
Unbind();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1161
1162
|
CHECK_OPENGL_ERROR
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1163
1164
1165
1166
1167
1168
1169
1170
|
#ifdef TESTING
duration_sampling = duration_sampling +
(std::clock() - start) / (double) CLOCKS_PER_SEC;
num_sampling = num_sampling + 1.0;
#endif
return current_cost;
}
|
556c4e15
Pavel Govyadinov
Changed the handl...
|
1171
1172
1173
1174
|
void
printTransform()
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1175
|
std::cout << cT << std::endl;
|
b710b044
Pavel Govyadinov
Added more tempor...
|
1176
|
}
|
a9b45efe
Pavel Govyadinov
changes to spider
|
1177
|
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1178
1179
1180
1181
1182
1183
1184
1185
|
//--------------------------------------------------------------------------//
//-----------------------------EXPERIMENTAL METHODS-------------------------//
//--------------------------------------------------------------------------//
void
DrawCylinder()
{
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1186
1187
1188
|
glNewList(dList+3, GL_COMPILE);
float z0 = -0.5; float z1 = 0.5; float r0 = 0.5;
float x,y;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1189
|
float xold = 0.5; float yold = 0.0;
|
ac430567
Pavel Govyadinov
comments comments...
|
1190
1191
|
float step = 360.0/numSamples*32;
//float step = 360.0/8.0;
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1192
1193
|
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, texID);
|
ac430567
Pavel Govyadinov
comments comments...
|
1194
|
glBegin(GL_QUAD_STRIP);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1195
|
int j = 0;
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1196
1197
1198
1199
1200
|
for(float i = step; i <= 360.0; i += step)
{
x=r0*cos(i*2.0*M_PI/360.0);
y=r0*sin(i*2.0*M_PI/360.0);
glTexCoord3f(x,y,z0);
|
ac430567
Pavel Govyadinov
comments comments...
|
1201
1202
|
glVertex2f(0.0, j*6.4+6.4);
// glVertex2f(0.0, j*27.0+27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1203
|
glTexCoord3f(x,y,z1);
|
ac430567
Pavel Govyadinov
comments comments...
|
1204
1205
|
glVertex2f(16.0, j*6.4+6.4);
// glVertex2f(16.0, j*27.0+27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1206
|
glTexCoord3f(xold,yold,z1);
|
ac430567
Pavel Govyadinov
comments comments...
|
1207
1208
|
glVertex2f(16.0, j*6.4);
// glVertex2f(16.0, j*27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1209
|
glTexCoord3f(xold,yold,z0);
|
ac430567
Pavel Govyadinov
comments comments...
|
1210
1211
|
glVertex2f(0.0, j*6.4);
// glVertex2f(0.0, j*27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1212
1213
1214
1215
1216
1217
|
xold=x;
yold=y;
j++;
}
glEnd();
glEndList();
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1218
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1219
1220
1221
1222
1223
1224
1225
1226
1227
|
///@param min_cost the cost value used for tracing
///traces out each seedpoint in the seeds queue to completion in both directions.
void
trace(int min_cost)
{
Bind();
rev = stim::vec<float>(0.0,0.0,1.0);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1228
1229
|
bool sEmpty = true;
float lastmag = 16.0;;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1230
1231
1232
1233
|
while(!seeds.empty())
{
//clear the currently traced line and start a new one.
cL.clear();
|
ac430567
Pavel Govyadinov
comments comments...
|
1234
|
cM.clear();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1235
1236
|
sk.Begin(stim::OBJ_LINE);
stim::vec<float> curSeed = seeds.top();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1237
|
// std::cout << "The current seeds is " << curSeed << std::endl;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1238
|
stim::vec<float> curSeedVec = seedsvecs.top();
|
ac430567
Pavel Govyadinov
comments comments...
|
1239
|
float curSeedMag = seedsmags.top();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1240
1241
|
seeds.pop();
seedsvecs.pop();
|
ac430567
Pavel Govyadinov
comments comments...
|
1242
|
seedsmags.pop();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1243
|
// std::cout << "The current seed Vector is " << curSeedVec << std::endl;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1244
1245
|
setPosition(curSeed);
setDirection(curSeedVec);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1246
|
cL.push_back(curSeed);
|
ac430567
Pavel Govyadinov
comments comments...
|
1247
|
cM.push_back(curSeedMag);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1248
1249
1250
1251
|
sk.createFromSelf(GL_SELECT);
traceLine(min_cost);
sk.rev();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1252
|
// std::cout << "reversed" << std::endl;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1253
|
std::reverse(cL.begin(), cL.end());
|
ac430567
Pavel Govyadinov
comments comments...
|
1254
|
std::reverse(cM.begin(), cM.end());
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1255
|
setPosition(curSeed);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1256
|
setDirection(-rev);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1257
1258
1259
|
setMagnitude(16.0);
sk.createFromSelf(GL_SELECT);
traceLine(min_cost);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1260
|
sk.End();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
|
}
Unbind();
}
///@param min_cost the cost value used for tracing
///traces the seedpoint passed to completion in one directions.
void
traceLine(int min_cost)
{
stim::vec<float> pos;
stim::vec<float> mag;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1272
|
int h;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1273
|
bool started = false;
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1274
|
bool running = true;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1275
|
stim::vec<float> size(S[0]*R[0], S[1]*R[1], S[2]*R[2]);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1276
|
while(running)
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1277
1278
1279
|
{
int cost = Step();
if (cost > min_cost){
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1280
|
running = false;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1281
1282
1283
1284
1285
1286
|
break;
} else {
//Have we found an edge?
pos = getPosition();
if(pos[0] > size[0] || pos[1] > size[1]
|| pos[2] > size[2] || pos[0] < 0
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1287
|
|| pos[1] < 0 || pos[2] < 0)
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1288
1289
|
{
// std::cout << "Found Edge" << std::endl;
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1290
|
running = false;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
|
break;
}
//If this is the first step in the trace,
// save the direction
//(to be used later to trace the fiber in the opposite direction)
if(started == false){
rev = -getDirection();
started = true;
}
// std::cout << i << p << std::endl;
m = getMagnitude();
//Has the template size gotten unreasonable?
if(m[0] > 75 || m[0] < 1){
// std::cout << "Magnitude Limit" << std::endl;
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1305
|
running = false;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1306
1307
1308
1309
1310
1311
|
break;
}
else
{
h = selectObject(pos, getDirection(), m[0]);
//Have we hit something previously traced?
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1312
1313
1314
1315
|
if(h != -1){
std::cout << "I hit a line" << h << std::endl;
running = false;
break;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1316
1317
|
}
else {
|
ac430567
Pavel Govyadinov
comments comments...
|
1318
|
cL.push_back(stim::vec<float>(p[0], p[1],p[2]));//
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1319
1320
|
sk.TexCoord(m[0]);
sk.Vertex(p[0], p[1], p[2]);
|
035d798f
Pavel Govyadinov
modified the spid...
|
1321
|
Bind(btexbufferID, bfboID, 27);
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1322
1323
1324
1325
1326
|
CHECK_OPENGL_ERROR
branchDetection();
CHECK_OPENGL_ERROR
Unbind();
CHECK_OPENGL_ERROR
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1327
1328
1329
1330
1331
1332
1333
|
}
}
}
}
}
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1334
|
int
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
|
selectObject(stim::vec<float> loc, stim::vec<float> dir, float mag)
{
//Define the varibles and turn on Selection Mode
float s = 3.0;
GLuint selectBuf[2048];
GLint hits;
glSelectBuffer(2048, selectBuf);
glDisable(GL_CULL_FACE);
(void) glRenderMode(GL_SELECT);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
|
//Init Names stack
glInitNames();
glPushName(1);
CHECK_OPENGL_ERROR
//What would that vessel see in front of it.
camSel.setPosition(loc);
camSel.setFocalDistance(mag/s);
camSel.LookAt((loc[0]+dir[0]*mag/s),
(loc[1]+dir[1]*mag/s),
(loc[2]+dir[2]*mag/s));
ps = camSel.getPosition();
ups = camSel.getUp();
ds = camSel.getLookAt();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
1363
|
glOrtho(-mag/s/2.0, mag/s/2.0, -mag/s/2.0, mag/s/2.0, 0.0, mag/s/2.0);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1364
1365
1366
1367
1368
1369
1370
1371
|
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
CHECK_OPENGL_ERROR
gluLookAt(ps[0], ps[1], ps[2],
ds[0], ds[1], ds[2],
ups[0], ups[1], ups[2]);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1372
1373
1374
1375
|
// sk.Render();
nt.Render();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1376
|
CHECK_OPENGL_ERROR
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1377
1378
1379
1380
1381
1382
1383
1384
|
// glLoadName((int) sk.numL());
glLoadName(nt.sizeE());
// sk.RenderLine(cL);
nt.RenderLine(cL);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1385
1386
1387
1388
1389
1390
1391
1392
1393
|
// glPopName();
glFlush();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
CHECK_OPENGL_ERROR
glPopMatrix();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1394
|
// glEnable(GL_CULL_FACE);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1395
|
hits = glRenderMode(GL_RENDER);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1396
|
int found_hits = processHits(hits, selectBuf);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1397
1398
1399
1400
1401
|
return found_hits;
}
//Given a size of the array (hits) and the memory holding it (buffer)
//returns whether a hit tool place or not.
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1402
|
int
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1403
1404
1405
|
processHits(GLint hits, GLuint buffer[])
{
GLuint names, *ptr;
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1406
|
//printf("hits = %u\n", hits);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1407
|
ptr = (GLuint *) buffer;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
|
// for (int i = 0; i < hits; i++) { /* for each hit */
names = *ptr;
// printf (" number of names for hit = %u\n", names);
ptr++;
ptr++; //Skip the minimum depth value.
ptr++; //Skip the maximum depth value.
// printf (" the name is ");
// for (int j = 0; j < names; j++) { /* for each name */
// printf ("%u ", *ptr); ptr++;
// }
// printf ("\n");
// }
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1422
|
if(hits == 0)
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1423
1424
1425
|
{
return -1;
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1426
|
else
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1427
|
{
|
035d798f
Pavel Govyadinov
modified the spid...
|
1428
|
// printf ("%u ", *ptr);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1429
1430
1431
1432
1433
1434
1435
1436
|
return *ptr;
}
}
void
clearCurrent()
{
cL.clear();
|
ac430567
Pavel Govyadinov
comments comments...
|
1437
|
cM.clear();
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1438
1439
|
}
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1440
|
void
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1441
1442
|
addToNetwork(pair<stim::fiber<float>, int> in, stim::vec<float> spos,
stim::vec<float> smag, stim::vec<float> sdir)
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1443
1444
1445
|
{
std::vector<stim::vec<float> > ce = in.first.centerline();
std::vector<stim::vec<float> > cm = in.first.centerlinemag();
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1446
|
//if the fiber is longer than 2 steps (the number it takes to diverge)
|
6b8621f8
Pavel Govyadinov
stable version
|
1447
|
if(ce.size() > 3)
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1448
1449
|
{
//if we did not hit a fiber
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1450
1451
|
if(in.second == -1)
{
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1452
1453
1454
|
spos[0] = spos[0]-sdir[0]*smag[0]/2.;
spos[1] = spos[1]-sdir[1]*smag[0]/2.;
spos[2] = spos[2]-sdir[2]*smag[0]/2.;
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1455
|
int h = selectObject(spos, -sdir, smag[0]);
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1456
|
//did we start with a fiber?
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1457
1458
1459
1460
|
if(h != -1)
nt.addEdge(ce, cm, h, -1);
else
nt.addEdge(ce, cm, -1, -1);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1461
|
}
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1462
|
//if we hit a fiber?
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1463
1464
|
else if(in.second != -1)
{
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1465
1466
1467
1468
|
nt.addEdge(ce,cm,-1, in.second);
spos[0] = spos[0]-sdir[0]*smag[0]/2.;
spos[1] = spos[1]-sdir[1]*smag[0]/2.;
spos[2] = spos[2]-sdir[2]*smag[0]/2.;
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1469
1470
1471
|
int h = selectObject(spos, -sdir, smag[0]);
//did start with a fiber?
if(h != -1){
|
ac430567
Pavel Govyadinov
comments comments...
|
1472
1473
|
// std::cout << "got here double" << smag.str() << std::endl;
nt.addEdge(ce,cm, h, in.second);
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1474
|
}
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1475
1476
1477
1478
|
}
}
}
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1479
|
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1480
1481
1482
|
void
printSizes()
{
|
035d798f
Pavel Govyadinov
modified the spid...
|
1483
1484
|
std::cout << nt.sizeE() << " edges " << std::endl;
std::cout << nt.sizeV() << " nodes " << std::endl;
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1485
1486
1487
|
}
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1488
1489
1490
|
std::pair<stim::fiber<float>, int >
traceLine(stim::vec<float> pos, stim::vec<float> mag, int min_cost)
{
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1491
1492
1493
1494
1495
|
//starting (seed) position and magnitude.
stim::vec<float> spos = getPosition();
stim::vec<float> smag = getMagnitude();
stim::vec<float> sdir = getDirection();
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1496
1497
|
Bind();
sk.Begin(stim::OBJ_LINE);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1498
1499
1500
1501
1502
|
// sk.createFromSelf(GL_SELECT);
nt.createFromSelf(GL_SELECT);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
|
cL.push_back(pos);
cM.push_back(mag);
// setPosition(pos);
// setMagnitude(mag);
int h;
bool started = false;
bool running = true;
stim::vec<float> size(S[0]*R[0], S[1]*R[1], S[2]*R[2]);
while(running)
{
int cost = Step();
if (cost > min_cost){
running = false;
sk.End();
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1518
|
pair<stim::fiber<float>, int> a(stim::fiber<float> (cL, cM), -1);
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1519
|
addToNetwork(a, spos, smag, sdir);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1520
|
return a;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
|
break;
} else {
//Have we found the edge of the map?
pos = getPosition();
if(pos[0] > size[0] || pos[1] > size[1]
|| pos[2] > size[2] || pos[0] < 0
|| pos[1] < 0 || pos[2] < 0)
{
// std::cout << "Found Edge" << std::endl;
running = false;
sk.End();
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1532
|
pair<stim::fiber<float>, int> a(stim::fiber<float> (cL, cM), -1);
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1533
|
addToNetwork(a, spos, smag, sdir);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1534
|
return a;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
|
break;
}
//If this is the first step in the trace,
// save the direction
//(to be used later to trace the fiber in the opposite direction)
if(started == false){
rev = -getDirection();
started = true;
}
// std::cout << i << p << std::endl;
//Has the template size gotten unreasonable?
mag = getMagnitude();
if(mag[0] > 75 || mag[0] < 1){
// std::cout << "Magnitude Limit" << std::endl;
running = false;
sk.End();
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1551
|
pair<stim::fiber<float>, int> a(stim::fiber<float> (cL, cM), -1);
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1552
|
addToNetwork(a, spos, smag, sdir);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1553
|
return a;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1554
1555
1556
1557
1558
1559
1560
|
break;
}
else
{
h = selectObject(p, getDirection(), m[0]);
//Have we hit something previously traced?
if(h != -1){
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1561
1562
|
running = false;
sk.End();
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1563
|
pair<stim::fiber<float>, int> a(stim::fiber<float> (cL, cM), h);
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1564
|
addToNetwork(a, spos, smag, sdir);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1565
|
return a;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1566
1567
1568
1569
|
break;
}
else {
cL.push_back(stim::vec<float>(p[0], p[1],p[2]));
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1570
1571
1572
|
cM.push_back(stim::vec<float>(m[0], m[0]));
// cM.push_back(m[0]);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1573
1574
|
sk.TexCoord(m[0]);
sk.Vertex(p[0], p[1], p[2]);
|
035d798f
Pavel Govyadinov
modified the spid...
|
1575
|
Bind(btexbufferID, bfboID, 27);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
|
CHECK_OPENGL_ERROR
branchDetection();
CHECK_OPENGL_ERROR
Unbind();
CHECK_OPENGL_ERROR
}
}
}
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1586
1587
|
}
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1588
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1589
|
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
1590
|
};
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1591
1592
|
}
#endif
|