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