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