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