GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
DistanceObject.hh
Go to the documentation of this file.
1
2#include "VectorTools.hh"
3#include "Effect.hh"
4
6{
7public:
8 virtual int NumDistances() const=0;
9 virtual float Distance(int idx, Point ps) const=0;
10 virtual bool Inside(Point p) const=0;
11 virtual int Idx(Point p) const=0;
12 virtual Color ColorValue(int idx, Point p) const=0;
13};
14
16{
17public:
18 ArrayDistanceObject(DistanceObject *array, int size) : array(array), size(size) { }
19 virtual int NumDistances() const
20 {
21 int s = size;
22 int num = 0;
23 for(int i=0;i<s;i++)
24 {
25 DistanceObject *obj = &array[i];
26 num += obj->NumDistances();
27 }
28 return num;
29 }
30 virtual bool Inside(Point p) const
31 {
32 int s = size;
33 //int num = 0;
34 for(int i=0;i<s;i++)
35 {
36 DistanceObject *obj = &array[i];
37 if (obj->Inside(p)) return true;
38 }
39 return false;
40 }
41 virtual int idx(Point p) const
42 {
43 int s = size;
44 //int num = 0;
45 for(int i=0;i<s;i++)
46 {
47 DistanceObject *obj = &array[i];
48 if (obj->Inside(p)) return i;
49 }
50 return -1;
51 }
52 virtual float Distance(int idx, Point ps) const
53 {
54 int s = size;
55 int num = 0;
56 int oldnum=0;
57 for(int i=0;i<s;i++)
58 {
59 DistanceObject *obj = &array[i];
60 for(int j=0;j<obj->NumDistances();j++)
61 {
62 if (num==idx) return obj->Distance(num-oldnum, ps);
63 num++;
64 }
65 oldnum = num;
66 }
67 return 0.0;
68 }
69 virtual Color ColorValue(int idx, Point p) const
70 {
71 int s = size;
72 int num = 0;
73 int oldnum=0;
74 for(int i=0;i<s;i++)
75 {
76 DistanceObject *obj = &array[i];
77 for(int j=0;j<obj->NumDistances();j++)
78 {
79 if (num==idx) return obj->ColorValue(num-oldnum, p);
80 num++;
81 }
82 oldnum = num;
83 }
84 Color c;
85 return c;
86 }
87
88private:
89 DistanceObject *array;
90 int size;
91};
92
93class DistanceObjectFunction : public Function<float,float>
94{
95public:
96 DistanceObjectFunction(const DistanceObject &o, float val, Ray &r) : o(o), /*val(val),*/r(r) { }
97 float Index(float val) const
98 {
99 return o.Distance(0,r.Index(val));
100 }
101private:
102 const DistanceObject &o;
103 //float val;
104 Ray &r;
105};
106
107Point find_pos(const DistanceObject &o, float val, Ray &r, float raydist);
108Color find_color(const DistanceObject &o, float val, Ray &r, float raydist);
109
110
112{
113public:
114 MinDistance(DistanceObject &array) : array(array) { }
115 virtual int NumDistances() const { return 1; }
116 virtual float Distance(int idx, Point ps) const
117 {
118 int mn = 9999999;
119 int s = array.NumDistances();
120 for(int i=0;i<s;i++)
121 {
122 float d = array.Distance(i, ps);
123 if (d<mn) mn=d;
124
125 }
126 return mn;
127 }
128private:
129 DistanceObject &array;
130};
131
133{
134public:
135 SphereDistance(Point center) : center(center) { }
136 virtual int NumDistances() const { return 1; }
137 virtual float Distance(int idx, Point ps) const
138 {
139 ps-=center;
140 return sqrt(ps.x*ps.x+ps.y*ps.y+ps.z*ps.z);
141 }
142private:
143 Point center;
144};
145
147{
148public:
149 PlaneDistance(Point p, Vector dir) : p(p), dir(dir) { }
150 virtual int NumDistances() const { return 1; }
151 virtual float Distance(int idx, Point ps) const
152 {
153 std::pair<Vector,Vector> split = Vector::SplitToComponents(ps-p, dir);
154 return split.first.Dist();
155 }
156private:
157 Point p;
158 Vector dir;
159};
160
161//
162// Separate objects
163//
164
166{
167public:
168 virtual ~Separate() { }
169 virtual float x_sep(Point p) const=0;
170 virtual float y_sep(Point p) const=0;
171 virtual float dist_sep(Point p) const=0;
172};
173
175{
176public:
177 virtual float x_sep(Point p) const { return 0.0; }
178 virtual float y_sep(Point p) const { return 0.0; }
179 virtual float dist_sep(Point p) const { return 0.0; }
180};
181#if 0
182class SeparateX : public Separate
183{
184public:
185 SeparateX(Separate *next, float (*fptr)(float,float,float,void*), void *data) : next(next), fptr(fptr), data(data) { }
186 virtual float x_sep(Point p) const { return fptr(p.x,p.y,p.z,data); }
187 virtual float y_sep(Point p) const { return next->y_sep(p); }
188 virtual float dist_sep(Point p) const { return next->dist_sep(p); }
189private:
190 Separate *next;
191 float (*fptr)(float,float,float,void*);
192 void *data;
193};
194
195class SeparateY : public Separate
196{
197public:
198 SeparateY(Separate *next, float (*fptr)(float,float,float,void*), void *data) : next(next), fptr(fptr), data(data) { }
199 virtual float x_sep(Point p) const { return next->x_sep(p); }
200 virtual float y_sep(Point p) const { return fptr(p.x,p.y,p.z,data); }
201 virtual float dist_sep(Point p) const { return next->dist_sep(p); }
202private:
203 Separate *next;
204 float (*fptr)(float,float,float,void*);
205 void *data;
206};
207#endif
208
209#if 0
210class SeparateDist : public Separate
211{
212public:
213 SeparateDist(Separate *next, float (*fptr)(float,float,float,void*), void *data) : next(next), fptr(fptr), data(data) { }
214 virtual float x_sep(Point p) const { return next->x_sep(p); }
215 virtual float y_sep(Point p) const { return next->y_sep(p); }
216 virtual float dist_sep(Point p) const { return fptr(p.x,p.y,p.z,data); }
217private:
218 Separate *next;
219 float (*fptr)(float,float,float,void*);
220 void *data;
221};
222#endif
223#if 0
224class SeparateRender : public SingleForwardFaceCollection
225{
226public:
227 struct Key { int kx; int ky;
228 friend bool operator<(const Key &k1, const Key &k2);
229 };
230 SeparateRender(Separate &s, float dist, float dist_accuracy,
231 float x_range_start, float x_range_end, float x_step,
232 float y_range_start, float y_range_end, float y_step,
233 float z_range_start, float z_range_end, float z_step,
234 float u_range_start, float u_range_end, float u_step,
235 float v_range_start, float v_range_end, float v_step
236 ) : /*s(s),*/ /*dist(dist), dist_accuracy(dist_accuracy/2.0),*/
237 x_range_start(x_range_start), x_range_end(x_range_end), x_step(x_step),
238 y_range_start(y_range_start), y_range_end(y_range_end), y_step(y_step)//,
239 //z_range_start(z_range_start), z_range_end(z_range_end), z_step(z_step)
240 {
241 for(float x=x_range_start;x<x_range_end;x+=x_step)
242 {
243 for(float y=y_range_start;y<y_range_end;y+=y_step)
244 {
245 for(float z=z_range_start;z<z_range_end;z+=z_step)
246 {
247 Point p(x,y,z);
248 float sz = s.dist_sep(p);
249 if (sz >= dist-dist_accuracy && sz <= dist+dist_accuracy)
250 {
251
252 float u = s.x_sep(p);
253 float v = s.y_sep(p);
254
255 int ssx = int((u-u_range_start)/u_step);
256 int ssy = int((v-v_range_start)/v_step);
257 Key k;
258 k.kx = ssx;
259 k.ky = ssy;
260 points[k] = p;
261 //std::cout << "Key: " << k.kx << " " << k.ky << ":= " << p << std::endl;
262 }
263 }
264 }
265 }
266
267 }
268 int X_Count() const { return (x_range_end-x_range_start)/x_step; }
269 int Y_Count() const { return (y_range_end-y_range_start)/y_step; }
270 void Collect(CollectVisitor &vis) { }
271 void HeavyPrepare() { }
272 virtual int NumFaces() const
273 {
274 return X_Count()*Y_Count();
275 }
276 virtual int NumPoints(int face) const
277 {
278 return 4;
279 }
280 virtual Point FacePoint(int face, int point) const
281 {
282 // std::cout << face << " " << point << std::endl;
283 Point p;
284 switch(point)
285 {
286 case 0: p=points[Face_to_key(face)]; break;
287 case 1: {
288 Key k = Face_to_key(face);
289 k.kx+=1;
290 p=points[k]; break;}
291 case 2: {
292 Key k = Face_to_key(face);
293 k.kx+=1;
294 k.ky+=1;
295 p=points[k];break; }
296 case 3: {
297 Key k = Face_to_key(face);
298 k.ky+=1;
299 p=points[k];break;}
300 }
301 //std::cout << "Point: " << p << std::endl;
302 return p;
303 }
304 virtual Vector PointNormal(int face, int point) const
305 {
306 Point p1 = FacePoint(face, 0);
307 Point p2 = FacePoint(face, 1);
308 Point p3 = FacePoint(face, 2);
309 return -Vector::CrossProduct(p2-p1,p3-p1);
310 }
311 virtual float Attrib(int face, int point, int id) const { return 0.0; }
312 virtual int AttribI(int face, int point, int id) const { return 0; }
313 virtual unsigned int Color(int face, int point) const { return 0xffffffff; }
314 virtual Point2d TexCoord(int face, int point) const
315 {
316 Point2d p = { 0.0, 0.0 };
317 return p;
318 }
319 Key Face_to_key(int face) const
320 {
321 Key k;
322 k.kx = face/X_Count();
323 k.ky = face-k.kx*X_Count();
324 //std::cout << "FaceToKey" << face << ":" << k.kx << " " << k.ky << std::endl;
325 return k;
326 }
327private:
328 //Separate &s;
329 //float dist;
330 //float dist_accuracy;
331 float x_range_start; float x_range_end; float x_step;
332 float y_range_start; float y_range_end; float y_step;
333 //float z_range_start; float z_range_end; float z_step;
334 //float u_range_start; float u_range_end; float u_step;
335 //float v_range_start; float v_range_end; float v_step;
336 mutable std::map<Key, Point> points;
337};
338#endif
339// (x,y,z)|- r
340//
341// (alfa,beta) |- (x,y,z)
342
343
344// Intersection
345
Color find_color(const DistanceObject &o, float val, Ray &r, float raydist)
Definition DistanceObject.cc:13
Point find_pos(const DistanceObject &o, float val, Ray &r, float raydist)
Definition DistanceObject.cc:4
void split(std::vector< FontInterfaceImpl::Bezier2d > &vec, FontInterfaceImpl::Bezier2d orig, float t, bool emit_left, bool emit_right)
Definition FreeType2.cc:134
bool operator<(const Dep &a1, const Dep &a2)
Definition GameApi_dep_add_find.cc:2905
virtual Color ColorValue(int idx, Point p) const
Definition DistanceObject.hh:69
ArrayDistanceObject(DistanceObject *array, int size)
Definition DistanceObject.hh:18
virtual int NumDistances() const
Definition DistanceObject.hh:19
virtual bool Inside(Point p) const
Definition DistanceObject.hh:30
virtual int idx(Point p) const
Definition DistanceObject.hh:41
virtual float Distance(int idx, Point ps) const
Definition DistanceObject.hh:52
Definition VectorTools.hh:380
DistanceObjectFunction(const DistanceObject &o, float val, Ray &r)
Definition DistanceObject.hh:96
float Index(float val) const
Definition DistanceObject.hh:97
Definition DistanceObject.hh:6
virtual int NumDistances() const =0
virtual bool Inside(Point p) const =0
virtual float Distance(int idx, Point ps) const =0
virtual int Idx(Point p) const =0
virtual Color ColorValue(int idx, Point p) const =0
virtual Vector PointNormal(int face, int point) const =0
virtual Point FacePoint(int face, int point) const =0
virtual float Attrib(int face, int point, int id) const =0
virtual unsigned int Color(int face, int point) const =0
virtual int NumPoints(int face) const =0
virtual Point2d TexCoord(int face, int point) const =0
virtual int NumFaces() const =0
virtual int AttribI(int face, int point, int id) const =0
Definition EffectI.hh:11
MinDistance(DistanceObject &array)
Definition DistanceObject.hh:114
virtual int NumDistances() const
Definition DistanceObject.hh:115
virtual float Distance(int idx, Point ps) const
Definition DistanceObject.hh:116
PlaneDistance(Point p, Vector dir)
Definition DistanceObject.hh:149
virtual int NumDistances() const
Definition DistanceObject.hh:150
virtual float Distance(int idx, Point ps) const
Definition DistanceObject.hh:151
Definition Effect.hh:10156
Definition DistanceObject.hh:175
virtual float y_sep(Point p) const
Definition DistanceObject.hh:178
virtual float dist_sep(Point p) const
Definition DistanceObject.hh:179
virtual float x_sep(Point p) const
Definition DistanceObject.hh:177
Definition DistanceObject.hh:166
virtual float x_sep(Point p) const =0
virtual ~Separate()
Definition DistanceObject.hh:168
virtual float y_sep(Point p) const =0
virtual float dist_sep(Point p) const =0
Definition Effect.hh:3156
void Collect(CollectVisitor &vis)
Definition Effect.hh:3159
void HeavyPrepare()
Definition Effect.hh:3160
SphereDistance(Point center)
Definition DistanceObject.hh:135
virtual int NumDistances() const
Definition DistanceObject.hh:136
virtual float Distance(int idx, Point ps) const
Definition DistanceObject.hh:137
Definition VectorTools.hh:125
static std::pair< Vector, Vector > SplitToComponents(Vector u, Vector u_x)
Definition VectorTools.hh:207
static Vector CrossProduct(const Vector &aVec, const Vector &aVec2)
Definition VectorTools.hh:193
d
Definition meshpage.php:3895
lazy data
Definition meshpage.php:1583
n< br > font size
Definition meshpage.php:3536
Definition Parser.cc:60
float x
Definition Parser.cc:60
float y
Definition Parser.cc:60
float z
Definition Parser.cc:60
num
Definition view.php:2821