91e2e1ec
Pavel Govyadinov
went to a better ...
|
1
|
#ifndef STIM_GL_SPIDER_H
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
2
3
|
#define STIM_GL_SPIDER_H
|
98eecaa9
David Mayerich
VS and win32 updates
|
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>
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
10
11
12
13
14
15
16
|
#include <stim/gl/gl_texture.h>
#include <stim/visualization/camera.h>
#include <stim/gl/error.h>
#include <stim/math/vector.h>
#include <stim/math/vec3.h>
#include <stim/math/rect.h>
#include <stim/math/matrix.h>
|
6ada8448
Pavel Govyadinov
Reverted to 40db1...
|
17
|
#include <stim/math/constants.h>
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
18
|
#include <stim/cuda/spider_cost.cuh>
|
7d1d153a
Pavel Govyadinov
fixed the include...
|
19
|
#include <stim/cuda/cudatools/glbind.h>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
20
|
#include <stim/cuda/arraymath.cuh>
|
c37611a6
Pavel Govyadinov
removed the time ...
|
21
|
#include <stim/cuda/cuda_texture.cuh>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
22
23
24
|
#include <stim/cuda/cudatools.h>
#include <stim/cuda/ivote.cuh>
#include <stim/visualization/glObj.h>
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
25
|
#include <vector>
|
b50c840e
David Mayerich
eliminated ANN fr...
|
26
|
#include <stack>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
27
|
#include <stim/cuda/branch_detection.cuh>
|
23af8e36
Pavel Govyadinov
modified spider t...
|
28
|
#include "../../../volume-spider/glnetwork.h"
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
29
|
#include <stim/visualization/cylinder.h>
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
30
31
|
#include <iostream>
#include <fstream>
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
32
33
34
35
36
|
#ifdef TIMING
#include <ctime>
#include <cstdio>
#endif
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
37
|
#ifdef TESTING
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
38
39
40
|
#include <cstdio>
#include <ctime>
#endif
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
41
|
|
2eefb035
Pavel Govyadinov
added debugging c...
|
42
43
44
|
#ifdef DEBUG
#include <stim/cuda/testKernel.cuh>
#endif
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
45
|
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
46
47
48
49
|
namespace stim
{
template<typename T>
|
34ec8a82
David Mayerich
added comments
|
50
|
class gl_spider // : public virtual gl_texture<T>
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
51
52
|
{
//doen't use gl_texture really, just needs the GLuint id.
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
53
|
//doesn't even need the texture iD really.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
54
|
private:
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
55
|
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
56
|
#ifdef TIMING
|
98eecaa9
David Mayerich
VS and win32 updates
|
57
58
59
60
61
62
63
|
double branch_time;// = 0;
double direction_time;// = 0;
double position_time;// = 0;
double size_time;// = 0;
double cost_time;// = 0;
double network_time;// = 0;
double hit_time;// = 0;
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
64
65
|
#endif
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
66
|
stim::vec3<float> p; //vector designating the position of the spider.
|
34ec8a82
David Mayerich
added comments
|
67
|
stim::vec3<float> d; //normalized direction of travel
|
7f297fc6
Pavel Govyadinov
added more detail...
|
68
|
float m; //size of the spider in tissue space.
|
34ec8a82
David Mayerich
added comments
|
69
|
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
70
|
std::vector<stim::vec3<float> > dV; //A list of all the direction vectors.
|
34ec8a82
David Mayerich
added comments
|
71
|
std::vector<stim::vec3<float> > pV; //A list of all test positions (relative to p)
|
7f297fc6
Pavel Govyadinov
added more detail...
|
72
|
std::vector<float> mV; //A list of all the size vectors.
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
73
|
std::vector<float> lV; //A list of all the size vectors.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
74
|
|
34ec8a82
David Mayerich
added comments
|
75
76
|
stim::matrix<float, 4> cT; //current Transformation matrix (tissue)->(texture)
GLuint texID; //OpenGL ID for the texture to be traced
|
7f297fc6
Pavel Govyadinov
added more detail...
|
77
78
|
stim::vec3<float> S; //Size of a voxel in the volume.
stim::vec3<float> R; //Dimensions of the volume.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
79
80
81
|
//GL and Cuda variables
|
34ec8a82
David Mayerich
added comments
|
82
83
84
85
86
87
88
89
|
GLuint dList; //ID of the starting display lists (series of 4)
//dList + 0 = direction template rectangles
//dList + 1 = position template rectangles
//dList + 2 = size template rectangles
//dList + 3 = branch detection cylinder around the fiber
GLuint fboID; //framebuffer ID for direction templates
GLuint texbufferID; //texture ID for direction templates
|
7f297fc6
Pavel Govyadinov
added more detail...
|
90
91
|
GLuint direction_buffID; //framebuffer ID, position templates
GLuint direction_texID; //texture ID, position templates
|
34ec8a82
David Mayerich
added comments
|
92
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
93
94
|
GLuint position_buffID; //framebuffer ID, position templates
GLuint position_texID; //texture ID, position templates
|
34ec8a82
David Mayerich
added comments
|
95
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
96
97
|
GLuint radius_buffID; //framebuffer ID, radius templates
GLuint radius_texID; //texture ID, radius templates
|
34ec8a82
David Mayerich
added comments
|
98
|
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
99
100
101
|
GLuint length_buffID; //framebuffer ID, radius templates
GLuint length_texID; //texture ID, radius templates
|
7f297fc6
Pavel Govyadinov
added more detail...
|
102
103
|
GLuint cylinder_buffID; //framebuffer ID, cylinder (surrounding fiber)
GLuint cylinder_texID; //texture ID, cylinder
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
104
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
105
|
int numSamples; //The number of templates in the buffer.
|
035d798f
Pavel Govyadinov
modified the spid...
|
106
107
108
|
int numSamplesPos;
int numSamplesMag;
|
34ec8a82
David Mayerich
added comments
|
109
110
111
112
|
float length; //this will be a function of the radius
float stepsize; //this will be a function of the length
int current_cost; //variable to store the cost of the current step
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
113
114
|
//Tracing variables.
|
34ec8a82
David Mayerich
added comments
|
115
116
117
|
std::stack< stim::vec3<float> > seeds; //seed positions
std::stack< stim::vec3<float> > seedsvecs; //seed directions
std::stack< float > seedsmags; //seed magnitudes
|
6b8621f8
Pavel Govyadinov
stable version
|
118
|
|
34ec8a82
David Mayerich
added comments
|
119
120
|
std::vector< stim::vec3<float> > cL; //centerline up to the current point
std::vector< stim::vec3<float> > cD; //directions up to the current point (debugging)
|
7f297fc6
Pavel Govyadinov
added more detail...
|
121
|
std::vector< float > cM; //radius up to the current point
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
122
|
std::vector< float > cLen; //radius up to the current point
|
23af8e36
Pavel Govyadinov
modified spider t...
|
123
|
|
34ec8a82
David Mayerich
added comments
|
124
125
|
stim::glnetwork<float> nt; //network object holding the currently traced centerlines
stim::glObj<float> sk; //OBJ file storing the network (identical to above)
|
23af8e36
Pavel Govyadinov
modified spider t...
|
126
|
|
34ec8a82
David Mayerich
added comments
|
127
128
|
//consider replacing with two seed points facing opposite directions
stim::vec<float> rev; //reverse vector
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
129
|
|
34ec8a82
David Mayerich
added comments
|
130
131
132
133
134
135
|
//selection mode - detecting fiber intersections
stim::camera camSel; //camera for selection mode (detecting collisions)
stim::vec3<float> ps; //position for the selection camera
stim::vec3<float> ups; //up direction for the selection camera
stim::vec3<float> ds; //direction for the selection camera
|
7f297fc6
Pavel Govyadinov
added more detail...
|
136
|
float n_pixels; //length of the template (in pixels)
|
c37611a6
Pavel Govyadinov
removed the time ...
|
137
138
|
//cuda texture variables that keep track of the binding.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
139
140
141
|
stim::cuda::cuda_texture t_dir; //cuda_texture object used as an interface between OpenGL and cuda for direction vectors.
stim::cuda::cuda_texture t_pos; //cuda_texture object used as an interface between OpenGL and cuda for position vectors.
stim::cuda::cuda_texture t_mag; //cuda_texture object used as an interface between OpenGL and cuda for size vectors.
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
142
|
stim::cuda::cuda_texture t_len; //cuda_texture object used as an interface between OpenGL and cuda for size vectors.
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
143
144
145
|
int last_fiber; //variable that tracks the last fiber hit during tracing. -1 if no fiber was hit.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
146
|
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
147
|
#ifdef DEBUG
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
148
|
int iter;
|
2eefb035
Pavel Govyadinov
added debugging c...
|
149
|
stringstream name;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
150
151
152
153
|
int iter_pos;
int iter_dir;
int iter_siz;
#endif
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
154
|
|
6b8621f8
Pavel Govyadinov
stable version
|
155
156
157
158
|
//--------------------------------------------------------------------------//
//-------------------------------PRIVATE METHODS----------------------------//
//--------------------------------------------------------------------------//
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
159
160
161
162
163
164
|
/// 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()
{
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
165
|
#ifdef TIMING
|
7f297fc6
Pavel Govyadinov
added more detail...
|
166
|
gpuStartTimer(); //Timer for profiling
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
167
|
#endif
|
ac430567
Pavel Govyadinov
comments comments...
|
168
169
|
setMatrix(); //create the transformation matrix.
glCallList(dList); //move the templates to p, d, m.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
170
|
glFinish(); //flush the pipeline
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
171
|
#ifdef TIMING
|
7f297fc6
Pavel Govyadinov
added more detail...
|
172
|
direction_time += gpuStopTimer(); //profiling
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
173
|
#endif
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
174
|
|
c37611a6
Pavel Govyadinov
removed the time ...
|
175
|
int best = getCost(t_dir.getTexture(), t_dir.getAuxArray() ,numSamples); //find min cost.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
176
177
178
179
180
181
|
#ifdef DEBUG
name.str("");
name << "Final_Cost_Direction_fiber_"<< iter << "_" << iter_dir << ".bmp";
test(t_dir.getTexture(), n_pixels*2.0, numSamples*n_pixels, name.str());
iter_dir++;
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
182
|
stim::vec<float> next( ///calculate the next vector.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
183
|
dV[best][0]*S[0]*R[0],
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
184
185
|
dV[best][1]*S[1]*R[1],
dV[best][2]*S[2]*R[2],
|
d4721000
Pavel Govyadinov
changes with debu...
|
186
|
0);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
187
188
189
190
191
|
next = (cT*next).norm(); ///transform the next vector into Tissue space.
setPosition( p[0]+next[0]*m/stepsize,
p[1]+next[1]*m/stepsize,
p[2]+next[2]*m/stepsize);
setDirection(next[0], next[1], next[2]); //move forward and change direction.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
192
193
|
}
|
6b8621f8
Pavel Govyadinov
stable version
|
194
195
|
/// 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...
|
196
|
/// will be at d * m.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
197
198
199
|
void
findOptimalPosition()
{
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
200
|
#ifdef TIMING
|
7f297fc6
Pavel Govyadinov
added more detail...
|
201
|
gpuStartTimer(); //timer for profiling
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
202
|
#endif
|
ac430567
Pavel Govyadinov
comments comments...
|
203
204
|
setMatrix(); //create the transformation matrix.
glCallList(dList+1); //move the templates to p, d, m.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
205
|
glFinish(); //flush the pipeline
|
c37611a6
Pavel Govyadinov
removed the time ...
|
206
|
// glFlush();
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
207
|
#ifdef TIMING
|
7f297fc6
Pavel Govyadinov
added more detail...
|
208
|
position_time += gpuStopTimer(); ///timer for profiling
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
209
210
|
#endif
|
c37611a6
Pavel Govyadinov
removed the time ...
|
211
|
int best = getCost(t_pos.getTexture(), t_pos.getAuxArray(), numSamplesPos); //find min cost.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
212
213
214
215
216
217
|
#ifdef DEBUG
name.str("");
name << "Final_Cost_Position_" << iter << "_" << iter_pos << ".bmp";
test(t_pos.getTexture(), n_pixels*2.0, numSamplesPos*n_pixels, name.str());
iter_pos++;
#endif
|
ac430567
Pavel Govyadinov
comments comments...
|
218
|
stim::vec<float> next( //find next position.
|
3f15dade
Pavel Govyadinov
changed the plane...
|
219
220
221
222
|
pV[best][0],
pV[best][1],
pV[best][2],
1);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
223
|
next = cT*next; //transform the next position vector into tissue space.
|
d4721000
Pavel Govyadinov
changes with debu...
|
224
225
|
setPosition(
next[0]*S[0]*R[0],
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
226
|
next[1]*S[1]*R[1],
|
d4721000
Pavel Govyadinov
changes with debu...
|
227
|
next[2]*S[2]*R[2]
|
ac430567
Pavel Govyadinov
comments comments...
|
228
|
); //adjust position.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
229
230
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
231
232
|
/// Method for finding the best scale for the spider.
/// changes the x, y, z size of the spider to minimize the cost
|
b50c840e
David Mayerich
eliminated ANN fr...
|
233
|
/// function.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
234
|
void
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
235
|
findOptimalRadius()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
236
|
{
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
237
238
239
|
#ifdef TIMING
gpuStartTimer();
#endif
|
ac430567
Pavel Govyadinov
comments comments...
|
240
241
|
setMatrix(); //create the transformation.
glCallList(dList+2); //move the templates to p, d, m.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
242
|
glFinish(); //flush the drawing pipeline.
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
243
244
245
|
#ifdef TIMING
size_time += gpuStopTimer();
#endif
|
c37611a6
Pavel Govyadinov
removed the time ...
|
246
|
int best = getCost(t_mag.getTexture(), t_mag.getAuxArray(), numSamplesMag); //get best cost.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
247
248
249
250
251
252
|
#ifdef DEBUG
name.str("");
name << "Final_Cost_Size_" << iter << "_" << iter_siz << ".bmp";
test(t_mag.getTexture(), n_pixels*2.0, numSamplesMag*n_pixels, name.str());
iter_siz++;
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
253
|
setMagnitude(m*mV[best]); //adjust the magnitude.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
254
255
|
}
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
|
/// Method for finding the best length for the spider.
/// changes the x, y, z size of the spider to minimize the cost
/// function.
void
findOptimalLength()
{
#ifdef TIMING
gpuStartTimer();
#endif
setMatrix(); //create the transformation.
glCallList(dList+3); //move the templates to p, d, m.
glFinish(); //flush the drawing pipeline.
#ifdef TIMING
size_time += gpuStopTimer();
#endif
int best = getCost(t_len.getTexture(), t_len.getAuxArray(), numSamplesMag); //get best cost.
#ifdef DEBUG
// name.str("");
// name << "Final_Cost_Size_" << iter << "_" << iter_siz << ".bmp";
// test(t_mag.getTexture(), n_pixels*2.0, numSamplesMag*n_pixels, name.str());
// iter_siz++;
#endif
setLength(mV[best]); //adjust the magnitude.
}
|
6b8621f8
Pavel Govyadinov
stable version
|
281
|
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
282
|
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
283
|
|
27194b56
Pavel Govyadinov
major bug fixes, ...
|
284
285
|
///finds all the branches in the a given fiber.
///using LoG method.
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
286
287
288
|
void
branchDetection2(int n = 8, int l_template = 8, int l_square = 8)
{
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
289
|
#ifdef TIMING
|
7f297fc6
Pavel Govyadinov
added more detail...
|
290
|
gpuStartTimer(); ///timer for performance analysis
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
291
292
|
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
293
|
if(cL.size() < 4){} ///if the size of the fiber is less then 4 we do nothing.
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
294
|
else{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
295
|
setMatrix(1); ///finds the current transformation matrix
|
7f297fc6
Pavel Govyadinov
added more detail...
|
296
|
DrawLongCylinder(n, l_template, l_square); ///Draw the cylinder.
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
297
|
stim::cylinder<float> cyl(cL, cM);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
298
|
std::vector< stim::vec<float> > result = find_branch(cylinder_texID, GL_TEXTURE_2D, n*l_square, (cL.size()-1)*l_template); ///find all the centers in cuda
|
2eefb035
Pavel Govyadinov
added debugging c...
|
299
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
300
301
302
|
stim::vec3<float> size(S[0]*R[0], S[1]*R[1], S[2]*R[2]); ///the borders of the texture.
float pval; //pvalue associated with the points on the cylinder.
if(!result.empty()) ///if we have any points
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
303
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
304
|
for(int i = 0; i < result.size(); i++) ///for each point
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
305
|
{
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
306
|
int id = result[i][2];
|
7f297fc6
Pavel Govyadinov
added more detail...
|
307
|
if(fmod(result[i][2], id) != 0 && id != 0) ///if the remainer is odd
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
308
309
310
|
{
pval = ((cyl.getl(id+1)-cyl.getl(id))*
|
7f297fc6
Pavel Govyadinov
added more detail...
|
311
|
(fmod(result[i][2], id))+cyl.getl(id))/cyl.getl(cL.size()-1); ///calculate pvalue
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
312
|
}
|
7f297fc6
Pavel Govyadinov
added more detail...
|
313
|
else if(id == 0) ///if the point is on the edge
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
314
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
315
|
pval = (cyl.getl(id+1)*result[i][2])/cyl.getl(cL.size()-1);
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
316
317
318
|
}
else
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
319
|
pval = (cyl.getl(id)/cyl.getl(cL.size()-1)); ///if the point is somewhere on the surface of the cylinder other than the edge
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
320
|
}
|
7f297fc6
Pavel Govyadinov
added more detail...
|
321
322
|
stim::vec3<float> v = cyl.surf(pval, result[i][0]); ///find the coordinates of the point at pval on the surface in tissue space.
stim::vec3<float> di = cyl.p(pval); ///find the coord of v in tissue space projected on the centerline.
|
8d55ae06
Pavel Govyadinov
Edited vec3 to ad...
|
323
324
|
float rad = cyl.r(pval); ///find the radius at the pvalue's location
// float rad = cyl.r(pval)/2; ///find the radius at the pvalue's location
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
325
326
327
|
if(
!(v[0] > size[0] || v[1] > size[1]
|| v[2] > size[2] || v[0] < 0
|
7f297fc6
Pavel Govyadinov
added more detail...
|
328
|
|| v[1] < 0 || v[2] < 0)) ///if the v point is INSIDE the volume
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
329
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
330
331
332
|
setSeed(v); ///add a seedpoint's position.
setSeedVec((v-di).norm()); ///add a seedpoints direction
setSeedMag(rad); ///add the starting radius.
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
333
|
}
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
334
335
|
}
}
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
336
|
}
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
337
|
#ifdef TIMING
|
7f297fc6
Pavel Govyadinov
added more detail...
|
338
|
branch_time += gpuStopTimer(); ///timer for performance.
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
339
|
#endif
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
340
341
|
}
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
342
343
344
|
float uniformRandom()
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
345
|
return ( (float)(rand()))/( (float)(RAND_MAX)); ///generates a random number between 0 and 1 using the uniform distribution.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
346
347
348
349
350
351
|
}
float normalRandom()
{
float u1 = uniformRandom();
float u2 = uniformRandom();
|
7f297fc6
Pavel Govyadinov
added more detail...
|
352
|
return cos(2.0*atan(1.0)*u2)*sqrt(-1.0*log(u1)); ///generate a random number using the normal distribution between 0 and 1.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
353
354
|
}
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
355
|
stim::vec3<float> uniformRandVector()
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
356
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
357
|
stim::vec3<float> r(uniformRandom(), uniformRandom(), 1.0); ///generate a random vector using the uniform distribution between 0 and 1.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
358
359
360
|
return r;
}
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
361
|
stim::vec3<float> normalRandVector()
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
362
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
363
|
stim::vec3<float> r(normalRandom(), normalRandom(), 1.0); ///generate a random vector using the normal distribution between 0 and 1.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
364
365
366
|
return r;
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
367
368
369
370
371
|
//--------------------------------------------------------------------------//
//---------------------TEMPLATE CREATION METHODS----------------------------//
//--------------------------------------------------------------------------//
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
372
373
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
374
375
|
///@param solidAngle, the size of the arc to sample.
///Method for populating the vector arrays with sampled vectors.
|
6b8621f8
Pavel Govyadinov
stable version
|
376
377
378
|
///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...
|
379
|
///uses the default d vector <0,0,1>
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
380
|
void
|
8d55ae06
Pavel Govyadinov
Edited vec3 to ad...
|
381
|
genDirectionVectors(float solidAngle = 3*stim::PI/4)
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
382
|
{
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
383
|
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
384
|
//Set up the vectors necessary for Rectangle creation.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
385
|
stim::vec3<float> Y(1.0,0.0,0.0); //orthogonal vec.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
386
387
388
|
stim::vec3<float> pos(0.0,0.0,0.0); //center point of a rectangle
float mag = 1.0; //size of the generated rectangle.
stim::vec3<float> dir(0.0, 0.0, 1.0); //normal of the rectangle
|
22e7d0c5
Pavel Govyadinov
Minor changes in ...
|
389
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
390
391
|
float PHI[2], Z[2], range;
PHI[0] = solidAngle/2; ///Project the solid angle into spherical coordinates
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
392
|
PHI[1] = asin(0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
393
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
394
|
Z[0] = cos(PHI[0]); ///Project the z into spherical coordinates
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
395
396
|
Z[1] = cos(PHI[1]);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
397
|
range = Z[0] - Z[1]; ///The range the possible values can be.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
398
399
|
float z, theta, phi;
|
7f297fc6
Pavel Govyadinov
added more detail...
|
400
401
|
glNewList(dList, GL_COMPILE); ///create a display list of all the direction templates.
for(int i = 0; i < numSamples; i++) ///for each sample
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
402
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
403
404
405
406
407
408
|
z = uniformRandom()*range + Z[1]; ///generate a z coordinate
theta = uniformRandom()*stim::TAU; ///generate a theta coordinate
phi = acos(z); ///generate a phi from the z.
stim::vec3<float> sph(1, theta, phi); ///combine into a vector in spherical coordinates.
stim::vec3<float> cart = sph.sph2cart();///convert to cartesian.
dV.push_back(cart); ///save the generated vector for further use.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
409
410
411
|
#ifdef DEBUG
// std::cout << cart << std::endl;
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
412
|
if(cos(Y.dot(cart)) < 0.087) ///make sure that the Y is not parallel to the new vector.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
413
414
415
416
|
{
Y[0] = 0.0; Y[1] = 1.0;
}else{
Y[0] = 1.0; Y[1] = 0.0;
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
417
|
}
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
418
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
419
|
hor = stim::rect<float>(mag, ///generate a rectangle with the new vectro as a normal.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
420
421
|
pos, cart,
((Y.cross(cart)).cross(cart)).norm());
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
422
423
424
425
|
#ifdef DEBUG
// std::cout << hor.n() << std::endl;
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
426
|
ver = stim::rect<float>(mag, ///generate another rectangle that's perpendicular the first but parallel to the cart vector.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
427
428
|
pos, cart,
hor.n());
|
7f297fc6
Pavel Govyadinov
added more detail...
|
429
|
UpdateBuffer(0.0, 0.0+i*n_pixels); ///Put the necessary points into the diplaylist.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
430
|
}
|
7f297fc6
Pavel Govyadinov
added more detail...
|
431
|
glEndList(); ///finilize the display list.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
432
|
}
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
433
|
|
ac430567
Pavel Govyadinov
comments comments...
|
434
|
///@param float delta, How much the rectangles vary in position.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
435
|
///Method for populating the buffer with the sampled texture.
|
ac430567
Pavel Govyadinov
comments comments...
|
436
437
438
|
///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...
|
439
|
///uses the default vector <0,0,0>
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
440
|
void
|
4191c034
Pavel Govyadinov
minor:bug fixes. ...
|
441
|
genPositionVectors(float delta = 0.4)
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
442
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
443
|
//Set up the vectors necessary for Rectangle creation.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
444
|
stim::vec3<float> Y(1.0,0.0,0.0); //orthogonal vec.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
445
446
447
|
stim::vec3<float> pos(0.0,0.0,0.0); //center point of a rectangle
float mag = 1.0; ///size of each rectangle
stim::vec3<float> dir(0.0, 0.0, 1.0); ///normal of the rectangle plane.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
448
449
|
//Set up the variable necessary for vector creation.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
450
|
glNewList(dList+1, GL_COMPILE); ///generate a new display list.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
451
452
453
454
455
456
457
458
|
pV.push_back(pos);
hor = stim::rect<float>(mag, ///generate a rec tangle with the new vector as a normal.
pos, dir,
((Y.cross(d)).cross(d))
.norm());
ver = stim::rect<float>(mag, ///generate anoth er rectangle that's perpendicular the first but parallel to the cart vector.
pos, dir,
hor.n());
|
fac43319
Pavel Govyadinov
Changed the posit...
|
459
|
///The first vector is always in the center.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
460
461
|
UpdateBuffer(0.0, 0.0+0*n_pixels);
for(int i = 1; i < numSamplesPos; i++) ///for the number of position samples
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
462
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
463
|
stim::vec3<float> temp = uniformRandVector(); ///generate a random point on a plane.
|
fac43319
Pavel Govyadinov
Changed the posit...
|
464
465
466
|
temp[0] = temp[0]*delta;
temp[1] = temp[1]*2*stim::PI;
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
467
|
temp[2] = 0.0;
|
fac43319
Pavel Govyadinov
Changed the posit...
|
468
|
temp = temp.cyl2cart();
|
7f297fc6
Pavel Govyadinov
added more detail...
|
469
470
|
pV.push_back(temp); ///save the point for further use.
hor = stim::rect<float>(mag, ///generate a rectangle with the new vector as a normal.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
471
472
473
|
temp, dir,
((Y.cross(d)).cross(d))
.norm());
|
7f297fc6
Pavel Govyadinov
added more detail...
|
474
|
ver = stim::rect<float>(mag, ///generate another rectangle that's perpendicular the first but parallel to the cart vector.
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
475
476
|
temp, dir,
hor.n());
|
7f297fc6
Pavel Govyadinov
added more detail...
|
477
|
UpdateBuffer(0.0, 0.0+i*n_pixels); ///sample the necessary points and put them into a display list.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
478
|
}
|
7f297fc6
Pavel Govyadinov
added more detail...
|
479
|
glEndList(); ///finilize the display list.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
480
481
|
#ifdef DEBUG
for(int i = 0; i < numSamplesPos; i++)
|
35a7195f
David Mayerich
added median spec...
|
482
|
std::cout << pV[i].str() << std::endl;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
483
|
#endif
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
484
485
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
486
|
///@param float delta, How much the rectangles are allowed to expand.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
487
|
///Method for populating the buffer with the sampled texture.
|
ac430567
Pavel Govyadinov
comments comments...
|
488
489
490
|
///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...
|
491
|
///uses the default m <1,1,0>
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
492
|
void
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
493
|
genMagnitudeVectors(float delta = 0.70)
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
494
495
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
496
|
//Set up the vectors necessary for Rectangle creation.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
497
|
stim::vec3<float> Y(1.0, 0.0, 0.0); //orthogonal vec.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
498
499
500
|
stim::vec3<float> pos(0.0, 0.0, 0.0); //center of the future rect.
float mag = 1.0; ///size of the rectangle
stim::vec3<float> dir(0.0, 0.0, 1.0); ///normal of the rectangle plane.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
501
502
|
//Set up the variable necessary for vector creation.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
503
504
505
|
float min = 1.0-delta; ///smallest size
float max = 1.0+delta; ///largers size.
float step = (max-min)/(numSamplesMag-1); ///the size variation from one rect to the next.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
506
|
float factor;
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
507
|
glNewList(dList+2, GL_COMPILE);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
508
|
for(int i = 0; i < numSamplesMag; i++){ ///for the number of position samples
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
509
|
//Create linear index
|
7f297fc6
Pavel Govyadinov
added more detail...
|
510
511
512
|
factor = (min+step*i)*mag; ///scaling factor
mV.push_back(factor); ///save the size factor for further use.
hor = stim::rect<float>(factor, ///generate a rectangle with the new vector as a normal.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
513
514
515
|
pos, dir,
((Y.cross(d)).cross(d))
.norm());
|
7f297fc6
Pavel Govyadinov
added more detail...
|
516
|
ver = stim::rect<float>(factor, ///generate another rectangle that's perpendicular the first but parallel to the cart vector.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
517
518
|
pos, dir,
hor.n());
|
7f297fc6
Pavel Govyadinov
added more detail...
|
519
|
UpdateBuffer(0.0, 0.0+i*n_pixels); ///sample the necessary points and put them into a display list.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
520
|
CHECK_OPENGL_ERROR
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
521
|
}
|
7f297fc6
Pavel Govyadinov
added more detail...
|
522
|
glEndList(); ///finilize the displaylist.
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
523
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
524
|
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
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
|
///@param float delta, How much the rectangles are allowed to expand.
///Method for populating the buffer with the sampled texture.
///Objects created are rectangles the with the created sizes.
///All points are sampled from a texture.
///Stored in a display list.
///uses the default m <1,1,0>
void
genLengthVectors(float delta = 0.70)
{
//Set up the vectors necessary for Rectangle creation.
stim::vec3<float> Y(1.0, 0.0, 0.0); //orthogonal vec.
stim::vec3<float> pos(0.0, 0.0, 0.0); //center of the future rect.
float mag = 1.0; ///size of the rectangle
stim::vec3<float> dir(0.0, 0.0, 1.0); ///normal of the rectangle plane.
stim::vec<float> temp(0.0,0.0,0.0);
//Set up the variable necessary for vector creation.
float min = 1.0-delta; ///smallest size
float max = 1.0+delta; ///largers size.
float step = (max-min)/(numSamplesMag-1); ///the size variation from one rect to the next.
float factor;
glNewList(dList+3, GL_COMPILE);
for(int i = 0; i < numSamplesMag; i++){ ///for the number of position samples
//Create linear index
factor = (min+step*i)*mag; ///scaling factor
lV.push_back(factor); ///save the size factor for further use.
temp[0] = factor;
temp[1] = mag;
hor = stim::rect<float>(temp, ///generate a rectangle with the new vector as a normal.
pos, dir,
((Y.cross(d)).cross(d))
.norm());
ver = stim::rect<float>(temp, ///generate another rectangle that's perpendicular the first but parallel to the cart vector.
pos, dir,
hor.n());
UpdateBuffer(0.0, 0.0+i*n_pixels); ///sample the necessary points and put them into a display list.
CHECK_OPENGL_ERROR
}
glEndList(); ///finilize the displaylist.
}
|
ac430567
Pavel Govyadinov
comments comments...
|
567
568
569
570
|
///@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...
|
571
572
573
|
void
UpdateBuffer(float v_x, float v_y)
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
574
575
576
577
578
579
580
581
582
|
stim::vec3<float>p1; ///first point.
stim::vec3<float>p2; ///second point.
stim::vec3<float>p3; ///third point.
stim::vec3<float>p4; ///fourth point.
p1 = hor.p(1,1); ///generate the top right point from the horizontal template.
p2 = hor.p(1,0); ///generate the bottom right point from the horizonatal template.
p3 = hor.p(0,0); ///generate the bottom left point from the horizontal template.
p4 = hor.p(0,1); ///generate the top left point from the horizonatal template.
glBegin(GL_QUADS); ///generate the Quad from the 4 points.
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
583
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
584
585
586
587
|
p1[0],
p1[1],
p1[2]
);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
588
589
|
glVertex2f(v_x,v_y);
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
590
591
592
593
|
p2[0],
p2[1],
p2[2]
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
594
|
glVertex2f(v_x+n_pixels, v_y);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
595
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
596
597
598
599
|
p3[0],
p3[1],
p3[2]
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
600
|
glVertex2f(v_x+n_pixels, v_y+n_pixels);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
601
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
602
603
604
|
p4[0],
p4[1],
p4[2]
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
605
|
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
606
607
608
609
610
611
612
613
|
glVertex2f(v_x, v_y+n_pixels);
glEnd(); ///finish the quad.
p1 = ver.p(1,1); ///generate the top right point from the vertical template.
p2 = ver.p(1,0); ///generate the bottom right point from the vertical template.
p3 = ver.p(0,0); ///generate the bottom left point from the vertical template.
p4 = ver.p(0,1); ///generate the top left point from the vertical template.
glBegin(GL_QUADS); ///generate the Quad from the 4 points.
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
614
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
615
616
617
618
|
p1[0],
p1[1],
p1[2]
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
619
|
glVertex2f(v_x+n_pixels, v_y);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
620
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
621
622
623
624
|
p2[0],
p2[1],
p2[2]
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
625
|
glVertex2f(v_x+2.0*n_pixels, v_y);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
626
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
627
628
629
630
|
p3[0],
p3[1],
p3[2]
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
631
|
glVertex2f(v_x+2.0*n_pixels, v_y+n_pixels);
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
632
|
glTexCoord3f(
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
633
634
635
636
|
p4[0],
p4[1],
p4[2]
);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
637
638
|
glVertex2f(v_x+n_pixels, v_y+n_pixels);
glEnd(); ///finish the quad.
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
639
|
}
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
640
|
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
641
|
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
642
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
643
644
645
|
//--------------------------------------------------------------------------//
//--------------------------------GL METHODS--------------------------------//
//--------------------------------------------------------------------------//
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
646
|
|
ac430567
Pavel Govyadinov
comments comments...
|
647
648
649
650
|
///@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...
|
651
|
///Function for setting up the 2D buffer that stores the samples.
|
ac430567
Pavel Govyadinov
comments comments...
|
652
|
///Initiates and sets parameters.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
653
|
void
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
654
655
|
GenerateFBO(unsigned int width, unsigned int height, GLuint &textureID, GLuint &framebufferID)
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
656
657
658
|
glDeleteFramebuffers(1, &framebufferID); ///clear the framebuffer.
glGenFramebuffers(1, &framebufferID); ///generate a clean buffer.
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID); ///bind the new buffer.
|
6ada8448
Pavel Govyadinov
Reverted to 40db1...
|
659
|
// int numChannels = 1;
|
c37611a6
Pavel Govyadinov
removed the time ...
|
660
|
// unsigned char* texels = new unsigned char[width * height * numChannels];
|
7f297fc6
Pavel Govyadinov
added more detail...
|
661
|
glGenTextures(1, &textureID); ///generate a texture that will attach to the buffer.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
662
|
glBindTexture(GL_TEXTURE_2D, textureID);
|
ac430567
Pavel Govyadinov
comments comments...
|
663
664
|
//Textures repeat and use linear interpolation, luminance format.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
665
666
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); ///Set up the texture to repeat at edges.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
667
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); ///Set up the texture to use Linear interpolation
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
668
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
669
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, ///Create the texture with no data.
|
c37611a6
Pavel Govyadinov
removed the time ...
|
670
671
|
width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
// delete[] texels;
|
7f297fc6
Pavel Govyadinov
added more detail...
|
672
673
|
glBindFramebuffer(GL_FRAMEBUFFER, 0); ///Bind the frontbuffer
glBindTexture(GL_TEXTURE_2D, 0); ///Unbind the texture.
|
a9f956be
Pavel Govyadinov
Fixed the cost fu...
|
674
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
675
|
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
676
|
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
677
|
///IF type == 0
|
ac430567
Pavel Govyadinov
comments comments...
|
678
|
///Method for using the gl manipulation to align templates from
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
679
|
///Template space (-0.5 0.5) to Texture space (0.0, 1.0),
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
680
|
///Based on the p of the spider in real space (arbitrary).
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
681
682
683
684
|
///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...
|
685
|
///All transformation happen in glMatrixMode(GL_TEXTURE).
|
ac430567
Pavel Govyadinov
comments comments...
|
686
|
///All transformation happen in glMatrixMode(GL_TEXTURE).
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
687
|
void setMatrix(int type = 0)
|
5f81932b
David Mayerich
restored Pavel's ...
|
688
|
{
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
689
690
691
692
693
694
|
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...
|
695
|
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
696
697
698
699
700
701
702
703
704
|
//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.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
705
706
707
|
glScalef(m,
m,
m);
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
708
709
710
|
//get and store the current transformation matrix for later use.
glGetFloatv(GL_TEXTURE_MATRIX, curTrans);
cT.set(curTrans);
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
711
712
713
714
715
716
717
718
719
720
721
722
|
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 ...
|
723
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
724
|
|
ac430567
Pavel Govyadinov
comments comments...
|
725
726
|
///Method for controling the buffer and texture binding.
///Clears the buffer upon binding.
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
727
728
729
730
731
732
733
734
735
|
void
Bind()
{
glBindFramebuffer(GL_FRAMEBUFFER, direction_buffID);//set up GL buffer
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
direction_texID,
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
736
737
738
739
740
741
742
743
|
0); ///Bind the texture to the 0th color attachement of the framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, direction_buffID); ///Bind the buffer again (safety operation).
GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0}; ///Designate the texture to be the drawbuffer of the framebuffer
glDrawBuffers(1, DrawBuffers); ///Set the current drawbuffer to the texture.
glBindTexture(GL_TEXTURE_2D, direction_texID); ///Bind the Texture
glClearColor(1,1,1,1); ///Set clear color to white
glClear(GL_COLOR_BUFFER_BIT); ///Clear the texture
glMatrixMode(GL_PROJECTION);
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
744
745
|
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
746
747
|
glLoadIdentity(); ///Load identity matrix into the projection and modelview
glViewport(0,0,2.0*n_pixels, numSamples*n_pixels); ///Designate the viewport and orth
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
748
749
|
gluOrtho2D(0.0,2.0*n_pixels,0.0,numSamples*n_pixels);
glEnable(GL_TEXTURE_3D);
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
750
|
glBindTexture(GL_TEXTURE_3D, texID); ///Bind the larger 3D texture.
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
751
752
753
754
755
756
|
CHECK_OPENGL_ERROR
}
///Method for controling the buffer and texture binding.
///Clears the buffer upon binding.
|
ac430567
Pavel Govyadinov
comments comments...
|
757
758
759
|
///@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...
|
760
|
void
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
761
|
Bind(GLuint &textureID, GLuint &framebufferID, int nSamples, float len = 8.0)
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
762
|
{
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
763
|
|
7f297fc6
Pavel Govyadinov
added more detail...
|
764
765
|
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID); ///Bind the framebuffer.
glFramebufferTexture2D( ///associate it with the texture
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
766
767
768
769
770
|
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
textureID,
0);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
771
772
773
774
775
|
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID); ///Bind the framebuffer.
GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0}; ///generate the drawbuffer.
glDrawBuffers(1, DrawBuffers); ///set the drawbuffer.
glBindTexture(GL_TEXTURE_2D, textureID); ///Bind the texture passed.
glMatrixMode(GL_PROJECTION); ///clear out the draw matrices
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
776
777
778
|
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
|
7f297fc6
Pavel Govyadinov
added more detail...
|
779
780
781
782
|
glViewport(0,0,2.0*len, nSamples*len); ///set up viewport
gluOrtho2D(0.0,2.0*len,0.0,nSamples*len); ///Set up ortho
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, texID); ///bind the main texture (return to original state).
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
783
784
785
|
CHECK_OPENGL_ERROR
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
786
|
|
ac430567
Pavel Govyadinov
comments comments...
|
787
|
///Unbinds all texture resources.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
788
789
790
791
|
void
Unbind()
{
//Finalize GL_buffer
|
7f297fc6
Pavel Govyadinov
added more detail...
|
792
|
glBindTexture(GL_TEXTURE_3D, 0); ///Bind the front buffer.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
793
|
CHECK_OPENGL_ERROR
|
7f297fc6
Pavel Govyadinov
added more detail...
|
794
|
glBindTexture(GL_TEXTURE_2D, 0); ///Bind the default GL texture.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
795
|
CHECK_OPENGL_ERROR
|
7f297fc6
Pavel Govyadinov
added more detail...
|
796
|
glBindFramebuffer(GL_FRAMEBUFFER, 0); ///Bind the defautl framebuffer.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
797
|
CHECK_OPENGL_ERROR
|
7f297fc6
Pavel Govyadinov
added more detail...
|
798
|
glDisable(GL_TEXTURE_3D); ///Turn off texturing.
|
ac430567
Pavel Govyadinov
comments comments...
|
799
|
CHECK_OPENGL_ERROR
|
ac430567
Pavel Govyadinov
comments comments...
|
800
801
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
802
|
|
5f81932b
David Mayerich
restored Pavel's ...
|
803
|
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
804
805
806
807
808
|
//--------------------------------------------------------------------------//
//--------------------------------CUDA METHODS------------------------------//
//--------------------------------------------------------------------------//
|
42145f38
Pavel Govyadinov
Fixed the issues ...
|
809
|
|
ac430567
Pavel Govyadinov
comments comments...
|
810
811
812
|
///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 ...
|
813
|
int
|
c37611a6
Pavel Govyadinov
removed the time ...
|
814
|
getCost(cudaTextureObject_t tObj, float* result, int n)
|
035d798f
Pavel Govyadinov
modified the spid...
|
815
|
{
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
816
|
#ifdef TIMING
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
817
|
gpuStartTimer(); ///Add timing variables
|
035d798f
Pavel Govyadinov
modified the spid...
|
818
819
|
#endif
stim::vec<int> cost =
|
7f297fc6
Pavel Govyadinov
added more detail...
|
820
|
stim::cuda::get_cost(tObj, result, n, 2*n_pixels, n_pixels); ///call the cuda function with the appropriate texture buffer.
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
821
|
#ifdef TIMING
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
822
|
cost_time += gpuStopTimer();
|
035d798f
Pavel Govyadinov
modified the spid...
|
823
|
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
824
|
current_cost = cost[1]; ///current cost.
|
035d798f
Pavel Govyadinov
modified the spid...
|
825
826
|
return cost[0];
}
|
ac430567
Pavel Govyadinov
comments comments...
|
827
|
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
828
|
public:
|
ac430567
Pavel Govyadinov
comments comments...
|
829
830
831
832
833
834
|
///ininializes the cuda device and environment.
void
initCuda()
{
stim::cudaSetDevice();
|
ac430567
Pavel Govyadinov
comments comments...
|
835
836
837
|
}
//horizonal rectangle forming the spider.
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
838
|
stim::rect<float> hor;
|
ac430567
Pavel Govyadinov
comments comments...
|
839
|
//vectical rectangle forming the spider.
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
840
841
|
stim::rect<float> ver;
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
842
|
//Timing variables.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
843
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
844
845
846
847
848
|
//--------------------------------------------------------------------------//
//-----------------------------CONSTRUCTORS---------------------------------//
//--------------------------------------------------------------------------//
|
ac430567
Pavel Govyadinov
comments comments...
|
849
850
|
///@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...
|
851
|
///Default Constructor
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
852
|
gl_spider
|
3f15dade
Pavel Govyadinov
changed the plane...
|
853
|
(int samples = 1089, int samplespos = 441,int samplesmag = 144)
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
854
|
{
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
855
856
|
p = stim::vec3<float>(0.0, 0.0, 0.0);
d = stim::vec3<float>(0.0, 0.0, 1.0);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
857
|
m = 1.0;
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
858
859
|
S = stim::vec3<float>(1.0, 1.0, 1.0);
R = stim::vec3<float>(1.0, 1.0, 1.0);
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
860
|
numSamples = samples;
|
035d798f
Pavel Govyadinov
modified the spid...
|
861
862
|
numSamplesPos = samplespos;
numSamplesMag = samplesmag;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
863
|
#ifdef DEBUG
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
864
|
iter = 0;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
865
866
867
868
|
iter_pos = 0;
iter_dir = 0;
iter_siz = 0;
#endif
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
869
870
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
871
872
873
874
875
876
877
878
879
|
///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...
|
880
881
|
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...
|
882
|
float mag_x, int numsamples = 1089, int numsamplespos = 441, int numsamplesmag =144)
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
883
|
{
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
884
885
|
p = stim::vec3<float>(pos_x, pos_y, pos_z);
d = stim::vec3<float>(dir_x, dir_y, dir_z);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
886
|
m = mag_x;
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
887
888
|
S = stim::vec3<float>(1.0,1.0,1.0);
R = stim::vec3<float>(1.0,1.0,1.0);
|
035d798f
Pavel Govyadinov
modified the spid...
|
889
890
891
|
numSamples = numsamples;
numSamplesPos = numsamplespos;
numSamplesMag = numsamplesmag;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
892
|
#ifdef DEBUG
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
893
|
iter = 0;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
894
895
896
897
|
iter_pos = 0;
iter_dir = 0;
iter_siz = 0;
#endif
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
898
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
899
900
901
902
903
904
905
|
///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
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
906
|
(stim::vec3<float> pos, stim::vec3<float> dir, float mag, int samples = 1089, int samplesPos = 441, int samplesMag = 144)
|
ac430567
Pavel Govyadinov
comments comments...
|
907
908
909
|
{
p = pos;
d = dir;
|
7f297fc6
Pavel Govyadinov
added more detail...
|
910
|
m = mag;
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
911
912
|
S = vec3<float>(1.0,1.0,1.0);
R = vec3<float>(1.0,1.0,1.0);
|
ac430567
Pavel Govyadinov
comments comments...
|
913
|
numSamples = samples;
|
035d798f
Pavel Govyadinov
modified the spid...
|
914
915
|
numSamplesPos = samplesPos;
numSamplesMag = samplesMag;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
916
|
#ifdef DEBUG
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
917
|
iter = 0;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
918
919
920
921
|
iter_pos = 0;
iter_dir = 0;
iter_siz = 0;
#endif
|
ac430567
Pavel Govyadinov
comments comments...
|
922
923
|
}
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
924
|
///destructor deletes all the texture and buffer objects.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
925
926
927
928
|
~gl_spider
(void)
{
Unbind();
|
7f297fc6
Pavel Govyadinov
added more detail...
|
929
930
931
932
933
934
|
glDeleteTextures(1, &direction_texID);
glDeleteBuffers(1, &direction_buffID);
glDeleteTextures(1, &position_texID);
glDeleteBuffers(1, &position_buffID);
glDeleteTextures(1, &radius_texID);
glDeleteBuffers(1, &radius_buffID);
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
935
936
|
glDeleteTextures(1, &length_texID);
glDeleteBuffers(1, &length_buffID);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
937
938
|
glDeleteTextures(1, &cylinder_texID);
glDeleteBuffers(1, &cylinder_buffID);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
939
940
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
941
|
///@param GLuint id, texture that is going to be sampled.
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
942
|
///Attached the spider to the texture with the given GLuint ID.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
943
|
///Samples in the default d acting as the init method.
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
944
|
///Also acts an init.
|
a9b45efe
Pavel Govyadinov
changes to spider
|
945
|
void
|
2a18be6d
Pavel Govyadinov
New comments and ...
|
946
|
attachSpider(GLuint id)
|
a9b45efe
Pavel Govyadinov
changes to spider
|
947
|
{
|
98eecaa9
David Mayerich
VS and win32 updates
|
948
949
950
951
952
953
954
955
956
|
#ifdef TIMING
branch_time = 0;
direction_time = 0;
position_time = 0;
size_time = 0;
cost_time = 0;
network_time = 0;
hit_time = 0;
#endif
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
957
958
|
#ifdef DEBUG
iter = 0;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
959
960
961
|
iter_pos = 0;
iter_dir = 0;
iter_siz = 0;
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
962
|
#endif
|
2eefb035
Pavel Govyadinov
added debugging c...
|
963
|
stepsize = 6.0;
|
7f297fc6
Pavel Govyadinov
added more detail...
|
964
|
n_pixels = 16.0;
|
98eecaa9
David Mayerich
VS and win32 updates
|
965
|
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
966
|
srand(100);
|
a9b45efe
Pavel Govyadinov
changes to spider
|
967
|
texID = id;
|
7f297fc6
Pavel Govyadinov
added more detail...
|
968
|
GenerateFBO(n_pixels*2, numSamples*n_pixels, direction_texID, direction_buffID);
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
969
|
CHECK_OPENGL_ERROR
|
7f297fc6
Pavel Govyadinov
added more detail...
|
970
|
GenerateFBO(n_pixels*2, numSamplesPos*n_pixels, position_texID, position_buffID);
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
971
|
CHECK_OPENGL_ERROR
|
7f297fc6
Pavel Govyadinov
added more detail...
|
972
|
GenerateFBO(n_pixels*2, numSamplesMag*n_pixels, radius_texID, radius_buffID);
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
973
974
|
CHECK_OPENGL_ERROR
GenerateFBO(n_pixels*2, numSamplesMag*n_pixels, length_texID, length_buffID);
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
975
|
CHECK_OPENGL_ERROR
|
7f297fc6
Pavel Govyadinov
added more detail...
|
976
|
GenerateFBO(16, 216, cylinder_texID, cylinder_buffID);
|
c0e09133
Pavel Govyadinov
STABLE: made temp...
|
977
|
CHECK_OPENGL_ERROR
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
978
|
t_dir.MapCudaTexture(direction_texID, GL_TEXTURE_2D);
|
c37611a6
Pavel Govyadinov
removed the time ...
|
979
|
t_dir.Alloc(numSamples);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
980
|
t_pos.MapCudaTexture(position_texID, GL_TEXTURE_2D);
|
c37611a6
Pavel Govyadinov
removed the time ...
|
981
|
t_pos.Alloc(numSamplesPos);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
982
|
t_mag.MapCudaTexture(radius_texID, GL_TEXTURE_2D);
|
c37611a6
Pavel Govyadinov
removed the time ...
|
983
|
t_mag.Alloc(numSamplesMag);
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
984
985
|
t_len.MapCudaTexture(length_texID, GL_TEXTURE_2D);
t_len.Alloc(numSamplesMag);
|
5eeaf941
Pavel Govyadinov
changer to the ba...
|
986
|
setMatrix();
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
987
|
dList = glGenLists(4);
|
db3c28c9
Pavel Govyadinov
Implemented glDis...
|
988
|
glListBase(dList);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
989
|
Bind(direction_texID, direction_buffID, numSamples, n_pixels);
|
b50c840e
David Mayerich
eliminated ANN fr...
|
990
|
genDirectionVectors(5*stim::PI/4);
|
3f15dade
Pavel Govyadinov
changed the plane...
|
991
|
Unbind();
|
7f297fc6
Pavel Govyadinov
added more detail...
|
992
|
Bind(position_texID, position_buffID, numSamplesPos, n_pixels);
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
993
|
genPositionVectors(0.2);
|
3f15dade
Pavel Govyadinov
changed the plane...
|
994
|
Unbind();
|
7f297fc6
Pavel Govyadinov
added more detail...
|
995
|
Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels);
|
035d798f
Pavel Govyadinov
modified the spid...
|
996
|
genMagnitudeVectors();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
997
|
Unbind();
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
998
999
1000
|
Bind(length_texID, length_buffID, numSamplesMag, n_pixels);
genLengthVectors();
Unbind();
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
1001
|
}
|
5f81932b
David Mayerich
restored Pavel's ...
|
1002
|
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
1003
1004
1005
|
//--------------------------------------------------------------------------//
//-----------------------------ACCESS METHODS-------------------------------//
//--------------------------------------------------------------------------//
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1006
|
///Returns the p vector.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1007
|
vec3<float>
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
1008
|
getPosition()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1009
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1010
|
return p;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1011
1012
|
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1013
|
///Returns the d vector.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1014
|
vec3<float>
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
1015
|
getDirection()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1016
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1017
|
return d;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1018
1019
|
}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1020
|
///Returns the m vector.
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
1021
|
float
|
a39577bf
Pavel Govyadinov
Changes to the sp...
|
1022
|
getMagnitude()
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1023
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1024
|
return m;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1025
1026
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1027
|
///@param stim::vec<float> pos, the new p.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1028
|
///Sets the p vector to input vector pos.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1029
|
void
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1030
|
setPosition(stim::vec3<float> pos)
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1031
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1032
|
p = pos;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1033
|
}
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
1034
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1035
1036
1037
|
///@param float x x-coordinate.
///@param float y y-coordinate.
///@param float z z-coordinate.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1038
|
///Sets the p vector to the input float coordinates x,y,z.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1039
1040
1041
|
void
setPosition(float x, float y, float z)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1042
1043
1044
|
p[0] = x;
p[1] = y;
p[2] = z;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1045
|
}
|
887a3e49
Pavel Govyadinov
fixed some order ...
|
1046
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1047
|
///@param stim::vec<float> dir, the new d.
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1048
|
///Sets the d vector to input vector dir.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1049
|
void
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1050
|
setDirection(stim::vec3<float> dir)
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1051
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1052
|
d = dir;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1053
1054
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1055
1056
1057
|
///@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...
|
1058
|
///Sets the d vector to the input float coordinates x,y,z.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1059
1060
1061
|
void
setDirection(float x, float y, float z)
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1062
1063
1064
|
d[0] = x;
d[1] = y;
d[2] = z;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1065
|
}
|
385d2447
Pavel Govyadinov
Checkpoint: Conve...
|
1066
|
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1067
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1068
|
///@param float mag, size of the sampled region.
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1069
|
///Sets the m value to the input mag for both templates.
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1070
|
void
|
5f81932b
David Mayerich
restored Pavel's ...
|
1071
|
setMagnitude(float mag)
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1072
|
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1073
|
m = mag;
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1074
|
}
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1075
1076
1077
1078
1079
1080
1081
1082
|
///@param float len, length of the sampled region.
///Sets the length value to the input len for both templates.
void
setLength(float len)
{
length = len;
}
|
5f81932b
David Mayerich
restored Pavel's ...
|
1083
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1084
1085
1086
1087
|
///@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...
|
1088
1089
1090
1091
1092
1093
1094
1095
|
void
setDims(float x, float y, float z)
{
S[0] = x;
S[1] = y;
S[2] = z;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1096
1097
1098
|
///@param stim::vec<float> Dims, voxel size.
///Sets the voxel sizes in each direction. necessary for non-standard data.
void
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1099
|
setDims(stim::vec3<float> Dims)
|
ac430567
Pavel Govyadinov
comments comments...
|
1100
1101
1102
1103
1104
1105
1106
1107
|
{
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...
|
1108
|
void
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1109
|
setSize(float x, float y, float z)
|
b710b044
Pavel Govyadinov
Added more tempor...
|
1110
|
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1111
1112
1113
|
R[0] = x;
R[1] = y;
R[2] = z;
|
b710b044
Pavel Govyadinov
Added more tempor...
|
1114
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1115
1116
1117
1118
|
///@param stim::vec<float> Dims, size of the volume.
///Sets the data volume sizes in each direction.
void
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1119
|
setSize(stim::vec3<float> Siz)
|
ac430567
Pavel Govyadinov
comments comments...
|
1120
1121
1122
|
{
S = Siz;
}
|
b710b044
Pavel Govyadinov
Added more tempor...
|
1123
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1124
1125
1126
1127
|
///@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...
|
1128
|
stim::vec<float>
|
4fa3f483
Pavel Govyadinov
Fixed the memory ...
|
1129
|
getRotation(stim::vec3<float> dir)
|
f304d6de
Pavel Govyadinov
added rotation to...
|
1130
|
{
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
1131
1132
1133
1134
|
stim::vec<float> out(0.0,0.0,0.0,0.0); ///The 4D rotation matrix for GL rotation
stim::vec3<float> from(0.0,0.0,1.0); ///Converting from template always involves 0,0,1 as a starting vector
out[0] = acos(dir.dot(from))*180/stim::PI; ///angle of rotation
if(out[0] < 1.0){
|
f304d6de
Pavel Govyadinov
added rotation to...
|
1135
1136
1137
1138
|
out[0] = 0.0;
out[1] = 0.0;
out[2] = 0.0;
out[3] = 1.0;
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
1139
1140
|
} ///if we rotate less what one degree don't rotate
else if(out[0] < -179.0) ///if we rotate more than -179 degrees rotate 180.
|
f7b84fb2
Pavel Govyadinov
more debug statem...
|
1141
1142
1143
1144
1145
|
{
out[0] = 180.0;
out[1] = 1.0;
out[2] = 0.0;
out[3] = 0.0;
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
1146
|
} else { ///the rotational axis is the cross fromxdir.
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1147
1148
|
stim::vec3<float> temp(0.0, 0.0, 0.0);;
temp = (from.cross(dir)).norm();
|
f304d6de
Pavel Govyadinov
added rotation to...
|
1149
1150
1151
1152
|
out[1] = temp[0];
out[2] = temp[1];
out[3] = temp[2];
}
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1153
|
#ifdef DEBUG
|
35a7195f
David Mayerich
added median spec...
|
1154
1155
|
std::cout << "out is " << out.str() << std::endl;
std::cout << "when rotating from " << from.str() << " to " << dir.str() << std::endl;
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1156
|
#endif
|
f304d6de
Pavel Govyadinov
added rotation to...
|
1157
1158
|
return out;
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1159
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1160
|
///@param stim::vec<float> pos, the position of the seed to be added.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1161
1162
1163
|
///Adds a seed to the seed list.
///Assumes that the coordinates passes are in tissue space.
void
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1164
|
setSeed(stim::vec3<float> pos)
|
a9b45efe
Pavel Govyadinov
changes to spider
|
1165
|
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1166
|
seeds.push(pos);
|
a9b45efe
Pavel Govyadinov
changes to spider
|
1167
|
}
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1168
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1169
1170
|
///@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...
|
1171
|
void
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1172
|
setSeedVec(stim::vec3<float> dir)
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1173
1174
1175
1176
|
{
seedsvecs.push(dir);
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1177
1178
1179
|
///@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...
|
1180
1181
|
void
setSeedMag(float mag)
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1182
|
{
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1183
|
seedsmags.push(mag);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1184
|
}
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1185
|
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1186
|
|
ac430567
Pavel Govyadinov
comments comments...
|
1187
1188
1189
|
///@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...
|
1190
1191
1192
1193
1194
|
///Adds a seed to the seed list.
///Assumes that the coordinates passes are in tissue space.
void
setSeed(float x, float y, float z)
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1195
1196
1197
|
seeds.push(stim::vec<float>(x, y, z));
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1198
1199
1200
1201
|
///@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...
|
1202
1203
1204
|
void
setSeedVec(float x, float y, float z)
{
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1205
1206
|
seedsvecs.push(stim::vec<float>(x, y, z));
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1207
1208
|
///Method to get the top of the seed positions stack.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1209
|
stim::vec3<float>
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1210
1211
|
getLastSeed()
{
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1212
|
stim::vec3<float> tp = seeds.top();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1213
1214
1215
|
return tp;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1216
|
///Method to get the top of the seed direction stack.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1217
|
stim::vec3<float>
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1218
1219
|
getLastSeedVec()
{
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1220
|
stim::vec3<float> tp = seedsvecs.top();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1221
1222
1223
|
return tp;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1224
|
///Method to get the top of the seed magnitude stack.
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1225
1226
1227
1228
1229
1230
1231
|
float
getLastSeedMag()
{
float tp = seedsmags.top();
return tp;
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1232
|
///deletes all data associated with the last seed.
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1233
1234
1235
1236
1237
|
void
popSeed()
{
seeds.pop();
seedsvecs.pop();
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1238
|
seedsmags.pop();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1239
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1240
1241
|
///returns the seeds position stack.
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1242
|
std::stack<stim::vec3<float> >
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1243
1244
1245
1246
1247
|
getSeeds()
{
return seeds;
}
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
|
///sets the number of direction templates.
void
setNumberDirectionTemplates(int n)
{
numSamples = n;
}
///sets the number of position templates.
void
setNumberPositionTemplates(int n)
{
numSamplesPos = n;
}
///sets the number of position templates.
void
setNumberSizeTemplates(int n)
{
numSamplesMag = n;
}
#ifdef TIMING
///Returns the timings at the moment the method is called.
///In the following order: Branch, Direction, Position, Size, Cost, Network, Hit_detetion.
std::vector<double>
getTimings()
{
std::vector <double> ret;
ret.resize(7);
ret[0] = branch_time;
ret[1] = direction_time;
ret[2] = position_time;
ret[3] = size_time;
ret[4] = cost_time;
ret[5] = network_time;
ret[6] = hit_time;
return ret;
}
#endif
|
ac430567
Pavel Govyadinov
comments comments...
|
1289
|
///returns true if all seed stacks are empty, else false.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1290
1291
1292
|
bool
Empty()
{
|
ac430567
Pavel Govyadinov
comments comments...
|
1293
|
//return (seeds.empty() && seedsvecs.empty() && seedsmags.empty());
|
1306fd96
Pavel Govyadinov
minor bug fixes i...
|
1294
|
return (seeds.empty() && seedsvecs.empty());
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1295
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1296
1297
1298
|
///@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...
|
1299
1300
1301
1302
|
///Assumes that the coordinates passes are in tissue space.
void
setSeeds(std::string file)
{
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
1303
|
std::ifstream myfile(file.c_str()); ///open a stream
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1304
1305
1306
1307
1308
|
string line;
if(myfile.is_open())
{
while (getline(myfile, line))
{
|
8303b04d
Pavel Govyadinov
fixed the bug and...
|
1309
|
float x, y, z, u, v, w, m; ///read the xyz uvw and m coordinates.
|
ac430567
Pavel Govyadinov
comments comments...
|
1310
|
myfile >> x >> y >> z >> u >> v >> w >> m;
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1311
|
setSeed(x, y, z);
|
ac430567
Pavel Govyadinov
comments comments...
|
1312
1313
|
setSeedVec(u, v, w);
setSeedMag(m);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1314
1315
1316
1317
1318
|
}
myfile.close();
} else {
std::cerr<<"failed" << std::endl;
}
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1319
1320
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1321
|
///Saves the network to a file.
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1322
|
void
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1323
|
saveNetwork(std::string name)
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1324
|
{
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1325
|
stim::glObj<float> sk1;
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1326
1327
|
for(int i = 0; i < nt.sizeE(); i++)
{
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1328
|
std::vector<float> cm = nt.getEdgeCenterLineMag(i);
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1329
|
std::vector<stim::vec3< float > > ce = nt.getEdgeCenterLine(i);
|
0df6a853
Pavel Govyadinov
still need to fix...
|
1330
|
sk1.Begin(stim::OBJ_LINE);
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1331
1332
|
for(int j = 0; j < ce.size(); j++)
{
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1333
1334
|
sk1.TexCoord(cm[j]);
sk1.Vertex(ce[j][0], ce[j][1], ce[j][2]);
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1335
|
}
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1336
|
sk1.End();
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1337
|
}
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1338
|
sk1.save(name);
|
79a9bf3f
Pavel Govyadinov
new implementatio...
|
1339
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1340
|
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1341
|
///Depreciated, but might be reused later()
|
ac430567
Pavel Govyadinov
comments comments...
|
1342
|
///returns a COPY of the entire stim::glObj object.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1343
1344
1345
|
stim::glObj<float>
getNetwork()
{
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1346
|
return sk;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1347
|
}
|
ac430567
Pavel Govyadinov
comments comments...
|
1348
1349
1350
1351
1352
1353
1354
|
///returns a COPY of the entire stim::glnetwork object.
stim::glnetwork<T>
getGLNetwork()
{
return nt;
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1355
1356
1357
1358
1359
1360
|
///Function to get back the framebuffer Object attached to the spider.
///For external access.
GLuint
getFB()
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1361
|
return cylinder_buffID;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1362
1363
|
}
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
1364
1365
1366
1367
1368
1369
1370
1371
|
//--------------------------------------------------------------------------//
//-----------------------------TEMPORARY METHODS----------------------------//
//--------------------------------------------------------------------------//
///temporary Method necessary for visualization and testing.
void
Update()
{
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1372
|
vec3<float> Y(1.0,0.0,0.0);
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1373
|
if(cos(Y.dot(d))< 0.087){
|
266aa74a
Pavel Govyadinov
CHECKPOINT: Minor...
|
1374
|
Y[0] = 0.0; Y[1] = 1.0;}
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1375
1376
1377
|
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...
|
1378
1379
1380
1381
|
hor.n());
}
|
c4887649
Pavel Govyadinov
fixed a significa...
|
1382
|
int
|
13c2a7d4
Pavel Govyadinov
some changes to t...
|
1383
1384
|
Step()
{
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1385
|
#ifdef DEBUG
|
2eefb035
Pavel Govyadinov
added debugging c...
|
1386
|
std::cerr << "Took a step";
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1387
|
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1388
|
Bind(direction_texID, direction_buffID, numSamples, n_pixels);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1389
|
CHECK_OPENGL_ERROR
|
035d798f
Pavel Govyadinov
modified the spid...
|
1390
|
findOptimalDirection();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1391
|
Unbind();
|
2eefb035
Pavel Govyadinov
added debugging c...
|
1392
1393
1394
|
#ifdef DEBUG
std::cerr << " " << current_cost;
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1395
|
Bind(position_texID, position_buffID, numSamplesPos, n_pixels);
|
035d798f
Pavel Govyadinov
modified the spid...
|
1396
|
findOptimalPosition();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1397
|
Unbind();
|
2eefb035
Pavel Govyadinov
added debugging c...
|
1398
1399
1400
|
#ifdef DEBUG
std::cerr << " " << current_cost;
#endif
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1401
|
Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels);
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1402
|
findOptimalRadius();
|
3f15dade
Pavel Govyadinov
changed the plane...
|
1403
|
Unbind();
|
2eefb035
Pavel Govyadinov
added debugging c...
|
1404
1405
1406
|
#ifdef DEBUG
std::cerr << " " << current_cost;
#endif
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1407
|
CHECK_OPENGL_ERROR
|
2eefb035
Pavel Govyadinov
added debugging c...
|
1408
1409
1410
|
#ifdef DEBUG
std::cerr << std::endl;
#endif
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1411
1412
1413
|
return current_cost;
}
|
556c4e15
Pavel Govyadinov
Changed the handl...
|
1414
1415
1416
1417
|
void
printTransform()
{
|
8e56a0a7
Pavel Govyadinov
Added the propose...
|
1418
|
std::cout << cT << std::endl;
|
b710b044
Pavel Govyadinov
Added more tempor...
|
1419
|
}
|
a9b45efe
Pavel Govyadinov
changes to spider
|
1420
|
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1421
1422
1423
1424
1425
1426
|
//--------------------------------------------------------------------------//
//-----------------------------EXPERIMENTAL METHODS-------------------------//
//--------------------------------------------------------------------------//
void
|
34ec8a82
David Mayerich
added comments
|
1427
|
MonteCarloDirectionVectors(int nSamples, float solidAngle = stim::TAU)
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1428
|
{
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1429
1430
1431
|
// float PHI[2];//, Z[2];//, range;
// PHI[0] = asin(solidAngle/2);
// PHI[1] = asin(0);
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1432
|
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1433
1434
|
// Z[0] = cos(PHI[0]);
// Z[1] = cos(PHI[1]);
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1435
|
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1436
|
// range = Z[0] - Z[1];
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1437
|
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
|
std::vector<stim::vec3<float> > vecsUni;
for(int i = 0; i < numSamplesPos; i++)
{
stim::vec3<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();
}
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1455
|
/*
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1456
|
void
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1457
1458
|
DrawCylinder()
{
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1459
1460
|
glNewList(dList+3, GL_COMPILE);
float z0 = -0.5; float z1 = 0.5; float r0 = 0.5;
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1461
|
float x,y;
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1462
|
float xold = 0.5; float yold = 0.0;
|
ac430567
Pavel Govyadinov
comments comments...
|
1463
1464
|
float step = 360.0/numSamples*32;
//float step = 360.0/8.0;
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1465
1466
|
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, texID);
|
ac430567
Pavel Govyadinov
comments comments...
|
1467
|
glBegin(GL_QUAD_STRIP);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1468
|
int j = 0;
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1469
1470
|
for(float i = step; i <= 360.0; i += step)
{
|
b50c840e
David Mayerich
eliminated ANN fr...
|
1471
1472
|
x=r0*cos(i*stim::TAU/360.0);
y=r0*sin(i*stim::TAU/360.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1473
|
glTexCoord3f(x,y,z0);
|
ac430567
Pavel Govyadinov
comments comments...
|
1474
1475
|
glVertex2f(0.0, j*6.4+6.4);
// glVertex2f(0.0, j*27.0+27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1476
|
glTexCoord3f(x,y,z1);
|
ac430567
Pavel Govyadinov
comments comments...
|
1477
1478
|
glVertex2f(16.0, j*6.4+6.4);
// glVertex2f(16.0, j*27.0+27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1479
|
glTexCoord3f(xold,yold,z1);
|
ac430567
Pavel Govyadinov
comments comments...
|
1480
1481
|
glVertex2f(16.0, j*6.4);
// glVertex2f(16.0, j*27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1482
|
glTexCoord3f(xold,yold,z0);
|
ac430567
Pavel Govyadinov
comments comments...
|
1483
1484
|
glVertex2f(0.0, j*6.4);
// glVertex2f(0.0, j*27.0);
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1485
1486
1487
1488
1489
1490
|
xold=x;
yold=y;
j++;
}
glEnd();
glEndList();
|
f31bf86d
Pavel Govyadinov
Added skeleton fu...
|
1491
|
}
|
97508a2e
Pavel Govyadinov
Added mehtods for...
|
1492
|
*/
|
8c4f5d84
Pavel Govyadinov
fixed the issue w...
|
1493
|
///need to return the cylinder.
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1494
|
///SOMETHING MIGHT BE GOING ON HERE IN GENERATE BUFFER.
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
1495
1496
1497
1498
|
void
DrawLongCylinder(int n = 8, int l_template = 8,int l_square = 8)
{
int cylLen = cL.size()-1;
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1499
1500
|
GenerateFBO(n*l_square, cylLen*l_template, cylinder_texID, cylinder_buffID);
Bind(cylinder_texID, cylinder_buffID, cylLen, l_template*l_square/2.0);
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
1501
|
stim::cylinder<float> cyl(cL, cM);
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1502
|
std::vector<std::vector<stim::vec3<float> > > p = cyl.getPoints(n);
|
e45b97ce
Pavel Govyadinov
safety commit, I ...
|
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
|
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...
|
1524
1525
1526
1527
1528
1529
1530
|
///@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)
{
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1531
1532
|
stim::vec3<float> curSeed;
stim::vec3<float> curSeedVec;
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1533
1534
|
float curSeedMag;
while(!Empty())
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1535
1536
|
{
//clear the currently traced line and start a new one.
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1537
1538
1539
|
curSeed = seeds.top();
curSeedVec = seedsvecs.top();
curSeedMag = seedsmags.top();
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1540
1541
|
seeds.pop();
seedsvecs.pop();
|
ac430567
Pavel Govyadinov
comments comments...
|
1542
|
seedsmags.pop();
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1543
1544
|
setPosition(curSeed);
setDirection(curSeedVec);
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1545
|
setMagnitude(curSeedMag);
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1546
1547
|
#ifdef DEBUG
|
35a7195f
David Mayerich
added median spec...
|
1548
|
std::cout << "The new seed " << curSeed.str() << curSeedVec.str() << curSeedMag << std::endl;
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1549
1550
1551
1552
1553
1554
|
#endif
// Bind(direction_texID, direction_buffID, numSamples, n_pixels);
// CHECK_OPENGL_ERROR
// findOptimalDirection();
// Unbind();
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1555
|
//THIS IS EXPERIMENTAL
|
2eefb035
Pavel Govyadinov
added debugging c...
|
1556
1557
1558
|
// Bind(radius_texID, radius_buffID, numSamplesMag, n_pixels);
// findOptimalRadius();
// Unbind();
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1559
|
//THIS IS EXPERIMENTAL
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1560
|
|
8761b649
Pavel Govyadinov
moved a lot of th...
|
1561
1562
1563
|
// cL.push_back(curSeed);
// cM.push_back(curSeedMag);
// cD.push_back(curSeedMag);
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1564
|
traceLine(p, m, min_cost);
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1565
|
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1566
1567
|
}
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1568
|
int
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1569
|
selectObject(stim::vec3<float> loc, stim::vec3<float> dir, float mag)
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1570
1571
|
{
//Define the varibles and turn on Selection Mode
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1572
1573
1574
1575
|
#ifdef TIMING
gpuStartTimer();
#endif
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1576
|
|
363243dc
Pavel Govyadinov
More comments
|
1577
1578
1579
1580
1581
|
GLuint selectBuf[2048]; ///size of the selection buffer in bytes.
GLint hits; ///hit fibers
glSelectBuffer(2048, selectBuf); ///bind the selection mode to the selection buffer.
glDisable(GL_CULL_FACE); ///Disable cullFace
(void) glRenderMode(GL_SELECT); ///initialize GL select mode.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1582
1583
|
//Init Names stack
|
363243dc
Pavel Govyadinov
More comments
|
1584
1585
|
glInitNames(); ///Initialize the naming array.
glPushName(1); ///Push a single name to the stack.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1586
1587
1588
|
CHECK_OPENGL_ERROR
//What would that vessel see in front of it.
|
363243dc
Pavel Govyadinov
More comments
|
1589
1590
|
camSel.setPosition(loc); ///Set the viewing camera
camSel.setFocalDistance(mag/stepsize); ///Set how far the fiber looks forward.
|
6ada8448
Pavel Govyadinov
Reverted to 40db1...
|
1591
1592
|
camSel.LookAt((loc[0]+dir[0]*mag/stepsize),
(loc[1]+dir[1]*mag/stepsize),
|
363243dc
Pavel Govyadinov
More comments
|
1593
1594
|
(loc[2]+dir[2]*mag/stepsize)); ///Set the look direction
ps = camSel.getPosition(); ///get all the necessary rotation variable for openGL
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1595
1596
|
ups = camSel.getUp();
ds = camSel.getLookAt();
|
363243dc
Pavel Govyadinov
More comments
|
1597
1598
|
glMatrixMode(GL_PROJECTION); ///Push the projection matrix.
glPushMatrix(); ///Reset the current projection matrix
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1599
|
glLoadIdentity();
|
363243dc
Pavel Govyadinov
More comments
|
1600
|
glOrtho(-mag/stepsize/2.0, mag/stepsize/2.0, -mag/stepsize/2.0, mag/stepsize/2.0, 0.0, mag/stepsize/2.0); ///Finalize the look paramenters
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1601
1602
1603
1604
1605
1606
1607
1608
|
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]);
|
363243dc
Pavel Govyadinov
More comments
|
1609
|
///Set the look at distance
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1610
1611
|
// sk.Render(); ///Render the network
nt.Render();
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1612
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1613
|
CHECK_OPENGL_ERROR
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1614
1615
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1616
1617
|
// glLoadName((int) sk.numL()); ///Load all the names
glLoadName(nt.sizeE());
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1618
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1619
1620
|
// sk.RenderLine(cL); ///Render the current line.
nt.RenderLine(cL);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1621
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1622
|
// glPopName();
|
363243dc
Pavel Govyadinov
More comments
|
1623
|
glFlush(); ///Flush the buffer
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1624
1625
1626
1627
1628
|
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
CHECK_OPENGL_ERROR
|
363243dc
Pavel Govyadinov
More comments
|
1629
|
glPopMatrix(); ///clear the vis matrices and pop the matrix
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1630
|
|
59781ee3
Pavel Govyadinov
fixed a stask bug...
|
1631
|
// glEnable(GL_CULL_FACE);
|
363243dc
Pavel Govyadinov
More comments
|
1632
1633
|
hits = glRenderMode(GL_RENDER); ///Check for hits.
int found_hits = processHits(hits, selectBuf); ///Process the hits.
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1634
1635
1636
1637
|
#ifdef TIMING
hit_time += gpuStopTimer();
#endif
|
363243dc
Pavel Govyadinov
More comments
|
1638
|
return found_hits; ///return whether we hit something or not.
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1639
1640
1641
1642
|
}
//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...
|
1643
|
int
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1644
1645
|
processHits(GLint hits, GLuint buffer[])
{
|
363243dc
Pavel Govyadinov
More comments
|
1646
|
GLuint *ptr; ///pointer to the detection buffer
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1647
|
ptr = (GLuint *) buffer;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1648
1649
1650
|
ptr++;
ptr++; //Skip the minimum depth value.
ptr++; //Skip the maximum depth value.
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1651
1652
|
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1653
|
if(hits == 0)
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1654
1655
1656
|
{
return -1;
}
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1657
|
else
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1658
|
{
|
035d798f
Pavel Govyadinov
modified the spid...
|
1659
|
// printf ("%u ", *ptr);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1660
1661
1662
1663
1664
1665
1666
1667
|
return *ptr;
}
}
void
clearCurrent()
{
cL.clear();
|
ac430567
Pavel Govyadinov
comments comments...
|
1668
|
cM.clear();
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1669
|
}
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1670
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1671
|
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1672
|
void
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1673
|
addToNetwork(std::vector<stim::vec3<float> > L, std::vector<float > M, stim::vec3<float> spos, stim::vec3<float> sdir, float smag)
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1674
|
{
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1675
|
//if the fiber is longer than 2 steps (the number it takes to diverge)
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1676
|
if(L.size() > 3)
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1677
1678
|
{
//if we did not hit a fiber
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1679
|
if(last_fiber == -1)
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1680
|
{
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1681
1682
1683
1684
|
spos[0] = spos[0]-sdir[0]*smag;
spos[1] = spos[1]-sdir[1]*smag;
spos[2] = spos[2]-sdir[2]*smag;
int h = selectObject(spos, -sdir, smag);
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1685
|
//did we start with a fiber?
|
11c1b46b
Pavel Govyadinov
minor bug fixes a...
|
1686
|
if(h != -1 && h < nt.sizeE())
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1687
|
nt.addEdge(L, M, h, -1);
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1688
|
else
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1689
|
nt.addEdge(L, M, -1, -1);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1690
|
}
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1691
|
//if we hit a fiber?
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1692
|
else if(last_fiber != -1)
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1693
|
{
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1694
1695
1696
1697
1698
|
nt.addEdge(L, M, -1, last_fiber);
spos[0] = spos[0]-sdir[0]*smag;
spos[1] = spos[1]-sdir[1]*smag;
spos[2] = spos[2]-sdir[2]*smag;
int h = selectObject(spos, -sdir, smag);
|
6707e8f5
Pavel Govyadinov
handled the case ...
|
1699
|
//did start with a fiber?
|
11c1b46b
Pavel Govyadinov
minor bug fixes a...
|
1700
|
if(h != -1 && h < nt.sizeE()){
|
ac430567
Pavel Govyadinov
comments comments...
|
1701
|
// std::cout << "got here double" << smag.str() << std::endl;
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1702
1703
1704
1705
1706
1707
|
nt.addEdge(L, M, h, last_fiber);
}
else
{
nt.addEdge(L, M, -1, -1);
}
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1708
1709
|
}
}
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1710
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1711
1712
|
#ifdef DEBUG
iter++;
|
efe7b7cc
Pavel Govyadinov
Added a detailed ...
|
1713
|
#endif
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1714
|
}
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1715
|
/*
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1716
|
void
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
1717
|
addToNetwork(std::vector<stim::vec3<float> > L, std::vector<float > M)
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1718
1719
1720
1721
1722
1723
|
{
if(L.size() > 3)
{
sk.Begin(stim::OBJ_LINE);
for(int i = 0; i < L.size(); i++)
{
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
1724
|
sk.TexCoord(M[i]);
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1725
1726
1727
|
sk.Vertex(L[i][0], L[i][1], L[i][2]);
}
sk.End();
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1728
|
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1729
|
nt.addEdge(L,M);
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1730
1731
1732
|
#ifdef DEBUG
iter++;
#endif
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1733
1734
|
}
}
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1735
|
*/
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1736
|
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1737
1738
1739
|
void
printSizes()
{
|
035d798f
Pavel Govyadinov
modified the spid...
|
1740
1741
|
std::cout << nt.sizeE() << " edges " << std::endl;
std::cout << nt.sizeV() << " nodes " << std::endl;
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1742
1743
|
}
|
0311ab81
Pavel Govyadinov
fixed some issues...
|
1744
|
void
|
09049866
Pavel Govyadinov
fixed a drawing b...
|
1745
|
traceLine(stim::vec3<float> pos, float mag, int min_cost)
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1746
|
{
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1747
|
//starting (seed) position and magnitude.
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1748
1749
1750
1751
1752
|
last_fiber = -1;
cL.clear();
cM.clear();
cD.clear();
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1753
|
stim::vec3<float> spos = getPosition();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1754
|
stim::vec3<float> sdir = getDirection();
|
a36c3850
Pavel Govyadinov
fixed the bug tha...
|
1755
|
float smag = getMagnitude();
|
821409d5
Pavel Govyadinov
added a way to ad...
|
1756
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1757
1758
|
setPosition(pos);
setMagnitude(mag);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1759
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1760
1761
1762
1763
1764
1765
|
cL.push_back(p);
cD.push_back(d);
cM.push_back(m);
// stim::vec3<float> spos = getPosition();
// float smag = getMagnitude();
// stim::vec3<float> sdir = getDirection();
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1766
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1767
1768
|
// Bind();
// sk.Begin(stim::OBJ_LINE);
|
23af8e36
Pavel Govyadinov
modified spider t...
|
1769
|
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1770
|
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1771
1772
|
//sk.createFromSelf(GL_SELECT);
nt.createFromSelf(GL_SELECT);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1773
1774
1775
|
int h;
bool started = false;
bool running = true;
|
7d3162a2
Pavel Govyadinov
fixed majority of...
|
1776
|
stim::vec3<float> size(S[0]*R[0], S[1]*R[1], S[2]*R[2]);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1777
1778
1779
1780
1781
|
while(running)
{
int cost = Step();
if (cost > min_cost){
running = false;
|
3e5d3ad3
Pavel Govyadinov
merged the change...
|
1782
|
branchDetection2();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1783
|
addToNetwork(cL, cM, spos, sdir, smag);
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1784
|
#ifdef DEBUG
|
a36c3850
Pavel Govyadinov
fixed the bug tha...
|
1785
|
std::cerr << "the cost of " << cost << " > " << min_cost << std::endl;
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1786
|
#endif
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1787
1788
1789
1790
|
break;
} else {
//Have we found the edge of the map?
pos = getPosition();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1791
1792
1793
|
if(p[0] > size[0] || p[1] > size[1]
|| p[2] > size[2] || p[0] < 0
|| p[1] < 0 || p[2] < 0)
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1794
|
{
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1795
|
running = false;
|
3e5d3ad3
Pavel Govyadinov
merged the change...
|
1796
|
branchDetection2();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1797
1798
|
// addToNetwork(cL, cM);
addToNetwork(cL, cM, spos, sdir, smag);
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1799
|
#ifdef DEBUG
|
a36c3850
Pavel Govyadinov
fixed the bug tha...
|
1800
|
std::cerr << "I hit and edge" << std::endl;
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1801
|
#endif
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1802
1803
1804
1805
1806
1807
1808
1809
1810
|
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...
|
1811
1812
|
//Has the template size gotten unreasonable?
mag = getMagnitude();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1813
|
if(m > 75 || m < 1){
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1814
|
running = false;
|
3e5d3ad3
Pavel Govyadinov
merged the change...
|
1815
|
branchDetection2();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1816
1817
|
// addToNetwork(cL, cM);
addToNetwork(cL, cM, spos, sdir, smag);
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1818
|
#ifdef DEBUG
|
a36c3850
Pavel Govyadinov
fixed the bug tha...
|
1819
|
std::cerr << "The templates are too big" << std::endl;
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1820
|
#endif
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1821
1822
1823
1824
|
break;
}
else
{
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1825
|
h = selectObject(p, getDirection(), m);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1826
1827
|
//Have we hit something previously traced?
if(h != -1){
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1828
|
#ifdef DEBUG
|
a36c3850
Pavel Govyadinov
fixed the bug tha...
|
1829
|
std::cerr << "I hit the fiber " << h << std::endl;
|
ec9d82e1
Pavel Govyadinov
finished the debu...
|
1830
|
#endif
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1831
|
last_fiber = h;
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1832
|
running = false;
|
3e5d3ad3
Pavel Govyadinov
merged the change...
|
1833
|
branchDetection2();
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1834
1835
|
// addToNetwork(cL, cM);
addToNetwork(cL, cM, spos, sdir, smag);
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1836
1837
1838
|
break;
}
else {
|
91e2e1ec
Pavel Govyadinov
went to a better ...
|
1839
1840
|
cL.push_back(p);
cD.push_back(d);
|
7f297fc6
Pavel Govyadinov
added more detail...
|
1841
|
cM.push_back(m);
|
47fe6300
Pavel Govyadinov
fixed an accident...
|
1842
|
// Unbind();
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1843
|
CHECK_OPENGL_ERROR
|
5de3a9c2
Pavel Govyadinov
CHECKPOINT: befo...
|
1844
1845
1846
1847
|
}
}
}
}
|
4166e973
Pavel Govyadinov
Added debug tags ...
|
1848
1849
1850
|
#ifdef DEBUG
std::cout << "I broke out!" << std::endl;
#endif
|
84eff8b1
Pavel Govyadinov
Merged only the n...
|
1851
|
}
|
4cefeb6d
Pavel Govyadinov
Changes to the re...
|
1852
|
};
|
fb0bc2f1
Pavel Govyadinov
added the gl_spid...
|
1853
1854
|
}
#endif
|