Blame view

gl/gl_spider.h 4.91 KB
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
1
2
3
4
  #ifndef STIM_GL_SPIDER_H
  #define STIM_GL_SPIDER_H
  
  #include <GL/glut.h>
4cefeb6d   Pavel Govyadinov   Changes to the re...
5
6
  //#include <GL/glew.h>
  #include "gl_texture.h"
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
7
8
9
  #include "../visualization/camera.h"
  #include "./error.h"
  #include "../math/vector.h"
4cefeb6d   Pavel Govyadinov   Changes to the re...
10
  #include "../math/rect.h"
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
11
12
13
14
15
16
17
18
  
  namespace stim
  {
  
  template<typename T>
  class gl_spider : public virtual gl_texture<T>
  {
  	//doen't use gl_texture really, just needs the GLuint id.
4cefeb6d   Pavel Govyadinov   Changes to the re...
19
  	//doesn't even need the texture iD really.
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
20
21
22
23
24
25
  	private:
  		stim::camera rotator;
  		stim::vec<float> position;  	//vector designating the position of the spider.
  		stim::vec<float> direction;	//vector designating the orientation of the spider
  						//always a unit vector.
  		stim::vec<float> magnitude;	//magnitude of the direction vector.
4cefeb6d   Pavel Govyadinov   Changes to the re...
26
27
  						//mag[0] = length.
  						//mag[1] = width.
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
28
29
  		//				Also maybe we some texture representation of
  		//				of the spider i.e [WH_pxl, BL_pxl, WH_pxl].
4cefeb6d   Pavel Govyadinov   Changes to the re...
30
  		using gl_texture<T>::texID;
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  
  
  		void
  		findOptimalDirection()
  		{
  			/* Method for finding the best direction for the spider.
  			   Uses the camera to rotate. Then Calls Evaluate to find new cost.
  			*/
  		}
  
  		void
  		findOptimalPosition()
  		{
  			/* Method for finding the best direction for the spider.
  			   Not sure if necessary since the next position for the spider
  			   will be at direction * magnitude. */
  		}
  	
  		void
  		findOptimalScale()
  		{
  			/* Method for finding the best scale for the spider.
  			   changes the x, y, z size of the spider to minimize the cost
  			   function. */
  		}
  
  		void
  		Evaluate()
  		{	
  			/* Uses uniform sampler2D in order to take a difference between
  			   the colors of two textures. 1st texture is the spider template,
  			   the 2nd is the location of the spider's overlap with the
  			   gl_template 
  	
  			   does the spider need to track it's location? Prob not since
  			   position can be set with gl_texture coordinates */
  		
  		}
  
  		void
  		Optimize()
  		{
  			/*find the optimum direction and scale */ 
  		}
13c2a7d4   Pavel Govyadinov   some changes to t...
75
  		/*
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
76
77
78
  		void
  		Step()
  		{
13c2a7d4   Pavel Govyadinov   some changes to t...
79
  			// move to the new position 
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
80
  		}
13c2a7d4   Pavel Govyadinov   some changes to t...
81
  		*/
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
82
  	public:
4cefeb6d   Pavel Govyadinov   Changes to the re...
83
  
13c2a7d4   Pavel Govyadinov   some changes to t...
84
85
86
87
88
89
90
  		stim::rect<float> hor;
  		stim::rect<float> ver;	
  
  
  
  		gl_spider
  		()
4cefeb6d   Pavel Govyadinov   Changes to the re...
91
92
93
  		{
  			setPosition(0.0,0.0,0.0);
  			setDirection(1.0,1.0,1.0);
13c2a7d4   Pavel Govyadinov   some changes to t...
94
  			setMagnitude(0.1,0.1);
4cefeb6d   Pavel Govyadinov   Changes to the re...
95
  			stim::vec<float> Y(1.0,0.0,0.0);
13c2a7d4   Pavel Govyadinov   some changes to t...
96
97
98
  			if(cos(Y.dot(direction))< 0.087){
  				Y[0] = 0.0; Y[1] = 1.0;}
  			/*
4cefeb6d   Pavel Govyadinov   Changes to the re...
99
  			hor = stim::rect<float>(position, direction, Y);
13c2a7d4   Pavel Govyadinov   some changes to t...
100
101
102
103
104
105
106
  			hor.scale(magnitude[0], magnitude[1]);
  			ver = stim::rect<float>(position, direction, (Y.cross(direction)).norm());
  			ver.scale(magnitude[0], magnitude[1]);
  			*/
  			hor = stim::rect<float>(magnitude, position, direction, Y);
  			ver = stim::rect<float>(magnitude, position, direction,
  				 (Y.cross(direction)).norm());
4cefeb6d   Pavel Govyadinov   Changes to the re...
107
108
  		}
  
13c2a7d4   Pavel Govyadinov   some changes to t...
109
110
  		gl_spider
  		(vec<float> pos, vec<float> dir, vec<float> mag)
4cefeb6d   Pavel Govyadinov   Changes to the re...
111
112
113
114
115
  		{
  			position = pos;
  			direction = dir;
  			magnitude = mag;
  			vec<float> Y(1.0,0.0,0.0);
13c2a7d4   Pavel Govyadinov   some changes to t...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  			if(cos(Y.dot(direction))< 0.087){
  				Y[0] = 0.0; Y[1] = 1.0;}
  			/*
  			hor = stim::rect<float>(position, direction, Y);
  			hor.scale(magnitude[0], magnitude[1]);
  			ver = stim::rect<float>(position, direction, (Y.cross(direction)).norm());
  			ver.scale(magnitude[0], magnitude[1]);
  			*/
  			hor = stim::rect<float>(magnitude, position, direction, Y);
  			ver = stim::rect<float>(magnitude, position, direction,
  				 (Y.cross(direction)).norm());
  		}
  		//temporary cost for convenience.	
  		gl_spider
  		(float pos_x, float pos_y, float pos_z, float dir_x, float dir_y, float dir_z,
  			float mag_x, float mag_y)
  		{
  			setPosition(pos_x, pos_y, pos_z);
  			setDirection(dir_x, dir_y, dir_z);
  			setMagnitude(mag_x, mag_y);
  			vec<float> Y(1.0,0.0,0.0);
  			if(cos(Y.dot(direction))< 0.087){
  				Y[0] = 0.0; Y[1] = 1.0;}
  			/*
4cefeb6d   Pavel Govyadinov   Changes to the re...
140
  			hor = stim::rect<float>(position, direction, Y);
13c2a7d4   Pavel Govyadinov   some changes to t...
141
142
143
144
145
146
147
  			hor.scale(magnitude[0], magnitude[1]);
  			ver = stim::rect<float>(position, direction, (Y.cross(direction)).norm());
  			ver.scale(magnitude[0], magnitude[1]);
  			*/
  			hor = stim::rect<float>(magnitude, position, direction.norm(), Y);
  			ver = stim::rect<float>(magnitude, position, direction.norm(),
  				 (Y.cross(direction)).norm());
4cefeb6d   Pavel Govyadinov   Changes to the re...
148
  		}
13c2a7d4   Pavel Govyadinov   some changes to t...
149
  
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
  		vec<float>
  		getCurrentPosition()
  		{
  			return position;
  		}
  	
  		vec<float>
  		getCurrentDirection()
  		{
  			return direction;
  		}
  
  		vec<float>
  		getCurrentMagnitude()
  		{
  			return magnitude;
  		}
  	
  		void
  		setPosition(vec<float> pos)
  		{
  			position = pos;
  		}
  		
  		void
  		setPosition(float x, float y, float z)
  		{
  			position[0] = x;
  			position[1] = y;
  			position[2] = z;
  		}
  
  		void
  		setDirection(vec<float> dir)
  		{
  			direction = dir;
  		}
  		
  		void
  		setDirection(float x, float y, float z)
  		{
  			direction[0] = x;
  			direction[1] = y;
  			direction[2] = z;
  		}
  		
  		void
  		setMagnitude(vec<float> mag)
  		{
  			magnitude = mag;
  		}
  		
  		void
4cefeb6d   Pavel Govyadinov   Changes to the re...
203
  		setMagnitude(float x, float y)
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
204
205
206
  		{
  			magnitude[0] = x;
  			magnitude[1] = y;
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
207
  		}
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
208
  
13c2a7d4   Pavel Govyadinov   some changes to t...
209
210
211
212
213
214
215
216
217
218
  		void
  		Step()
  		{
  			std::cout << position[0] << "," << position[1] << "," << position[1]
  				<< std::endl;
  			setPosition(direction*magnitude[1]+position);
  			std::cout << position[0] << "," << position[1] << "," << position[1]
  				<< std::endl;
  			
  		}
4cefeb6d   Pavel Govyadinov   Changes to the re...
219
  };
fb0bc2f1   Pavel Govyadinov   added the gl_spid...
220
221
  }
  #endif