Subversion Repositories gelsvn

Rev

Rev 64 | Rev 136 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 64 Rev 102
Line 131... Line 131...
131
			else {
131
			else {
132
				pos.x = p1->x; pos.y = p1->y; pos.z = p1->z;
132
				pos.x = p1->x; pos.y = p1->y; pos.z = p1->z;
133
				neg.x = p2->x; neg.y = p2->y; neg.z = p2->z;
133
				neg.x = p2->x; neg.y = p2->y; neg.z = p2->z;
134
			}
134
			}
135
			while (1) {
135
			while (1) {
136
				p->x = 0.5*(pos.x + neg.x);
136
				p->x = 0.5f*(pos.x + neg.x);
137
				p->y = 0.5*(pos.y + neg.y);
137
				p->y = 0.5f*(pos.y + neg.y);
138
				p->z = 0.5*(pos.z + neg.z);
138
				p->z = 0.5f*(pos.z + neg.z);
139
				if (i++ == RES) return;
139
				if (i++ == RES) return;
140
				if ((function->eval(p->x, p->y, p->z)) > 0.0)
140
				if ((function->eval(p->x, p->y, p->z)) > 0.0)
141
					{pos.x = p->x; pos.y = p->y; pos.z = p->z;}
141
					{pos.x = p->x; pos.y = p->y; pos.z = p->z;}
142
				else {neg.x = p->x; neg.y = p->y; neg.z = p->z;}
142
				else {neg.x = p->x; neg.y = p->y; neg.z = p->z;}
143
			}
143
			}
Line 301... Line 301...
301
			/* for speed, do corner value caching here */
301
			/* for speed, do corner value caching here */
302
			corner_lst.push_back(CORNER());
302
			corner_lst.push_back(CORNER());
303
			CORNER *c = &corner_lst.back();
303
			CORNER *c = &corner_lst.back();
304
			int index = HASH(i, j, k);
304
			int index = HASH(i, j, k);
305
 
305
 
306
			c->i = i; c->x = start.x+((float)i-.5)*size;
306
			c->i = i; c->x = start.x+((float)i-.5f)*size;
307
			c->j = j; c->y = start.y+((float)j-.5)*size;
307
			c->j = j; c->y = start.y+((float)j-.5f)*size;
308
			c->k = k; c->z = start.z+((float)k-.5)*size;
308
			c->k = k; c->z = start.z+((float)k-.5f)*size;
309
 
309
 
310
			CORNERLIST::const_iterator l = corners[index].begin();
310
			CORNERLIST::const_iterator l = corners[index].begin();
311
			for (; l != corners[index].end(); ++l)
311
			for (; l != corners[index].end(); ++l)
312
				if (l->i == i && l->j == j && l->k == k) {
312
				if (l->i == i && l->j == j && l->k == k) {
313
					c->value = l->value;
313
					c->value = l->value;
Line 365... Line 365...
365
			int i;
365
			int i;
366
			TEST test;
366
			TEST test;
367
			float range = size;
367
			float range = size;
368
			test.ok = 1;
368
			test.ok = 1;
369
			for (i = 0; i < 10000; i++) {
369
			for (i = 0; i < 10000; i++) {
370
				test.p.x = x+range*(RAND()-0.5);
370
				test.p.x = x+range*(RAND()-0.5f);
371
				test.p.y = y+range*(RAND()-0.5);
371
				test.p.y = y+range*(RAND()-0.5f);
372
				test.p.z = z+range*(RAND()-0.5);
372
				test.p.z = z+range*(RAND()-0.5f);
373
				test.value = function->eval(test.p.x, test.p.y, test.p.z);
373
				test.value = function->eval(test.p.x, test.p.y, test.p.z);
374
				if (sign == (test.value > 0.0)) return test;
374
				if (sign == (test.value > 0.0)) return test;
375
				range = range*1.0005; /* slowly expand search outwards */
375
				range = range*1.0005f; /* slowly expand search outwards */
376
			}
376
			}
377
			test.ok = 0;
377
			test.ok = 0;
378
			return test;
378
			return test;
379
		}
379
		}
380
 
380
 
Line 517... Line 517...
517
			case BN: return (face == B)? RB : LN;
517
			case BN: return (face == B)? RB : LN;
518
			case BF: return (face == B)? LB : RF;
518
			case BF: return (face == B)? LB : RF;
519
			case TN: return (face == T)? LT : RN;
519
			case TN: return (face == T)? LT : RN;
520
			case TF: return (face == T)? RT : LF;
520
			case TF: return (face == T)? RT : LF;
521
			}
521
			}
-
 
522
			return -1;
522
		}
523
		}
523
 
524
 
524
		/* otherface: return face adjoining edge that is not the given face */
525
		/* otherface: return face adjoining edge that is not the given face */
525
 
526
 
526
		inline int CUBETABLE::otherface (int edge, int face)
527
		inline int CUBETABLE::otherface (int edge, int face)