ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/oct.C
(Generate patch)

Comparing libgender/oct.C (file contents):
Revision 1.58 by root, Sun Oct 17 18:11:20 2004 UTC vs.
Revision 1.59 by root, Mon Oct 18 12:01:14 2004 UTC

115 sector centeri = orig + (extent >> 1) - ctx.orig; 115 sector centeri = orig + (extent >> 1) - ctx.orig;
116 point centerf = point (centeri) + ((extent & 1) ? 0.5F : 0.F); 116 point centerf = point (centeri) + ((extent & 1) ? 0.5F : 0.F);
117 117
118 GLfloat rad = ctx.diagfact * extent2; 118 GLfloat rad = ctx.diagfact * extent2;
119 119
120 if (!overlap (ctx.frustum.c, sphere (centerf, rad)))
121 return false;
122
120 if (orig <= ctx.orig && ctx.orig <= orig + extent) 123 if (orig <= ctx.orig && ctx.orig <= orig + extent)
121 vs.state = PARTIAL; 124 vs.state = PARTIAL;
122 else 125 else
123 { 126 {
124 if (ctx.frustum.t.distance (centerf) < -rad) return false; 127 if (distance (ctx.frustum.t, centerf) < -rad) return false;
125 if (ctx.frustum.b.distance (centerf) < -rad) return false; 128 if (distance (ctx.frustum.b, centerf) < -rad) return false;
126 if (ctx.frustum.l.distance (centerf) < -rad) return false; 129 if (distance (ctx.frustum.l, centerf) < -rad) return false;
127 if (ctx.frustum.r.distance (centerf) < -rad) return false; 130 if (distance (ctx.frustum.r, centerf) < -rad) return false;
128 if (ctx.frustum.n.distance (centerf) < -rad) return false; 131 if (distance (ctx.frustum.n, centerf) < -rad) return false;
129 132
133#if 0
130 GLfloat fd = ctx.frustum.f.distance (centerf); 134 GLfloat fd = distance (ctx.frustum.f, centerf);
131 135
132#if 0
133 if (fd < -(ctx.c_far - ctx.z_far) -rad * 3.F) 136 if (fd < -(ctx.c_far - ctx.z_far) -rad * 3.F)
134 return false; 137 return false;
135#endif 138#endif
136 } 139 }
137 140
138 if (vs.state == OCCLUDED) 141 if (vs.state == OCCLUDED)
139 return false; 142 return false;
140 143
141 GLfloat z = ctx.z_near + ctx.frustum.n.distance (centerf) + rad; 144 GLfloat z = ctx.z_near + distance (ctx.frustum.n, centerf) + rad;
142 if (ctx.perspfact * extent / z < 1.) // very crude "too small to see" check 145 if (ctx.perspfact * extent / z < 1.) // very crude "too small to see" check
143 return false; 146 return false;
144 //printf ("z %f, perspfact %f, z*p %f\n", z, ctx.perspfact, ctx.perspfact / z); 147 //printf ("z %f, perspfact %f, z*p %f\n", z, ctx.perspfact, ctx.perspfact / z);
145 148
149#if 0
146 if (vs.state == PARTIAL || vs.state == FULL) 150 if (vs.state == PARTIAL || vs.state == FULL)
147 ctx.nc_far = max (ctx.nc_far, z); 151 ctx.nc_far = max (ctx.nc_far, z);
152#endif
148 153
149 // node to start with 154 // node to start with
150 unsigned char si = centeri.x > 0 ? 1 : 0 155 unsigned char si = centeri.x > 0 ? 1 : 0
151 | centeri.y > 0 ? 2 : 0 156 | centeri.y > 0 ? 2 : 0
152 | centeri.z > 0 ? 4 : 0; 157 | centeri.z > 0 ? 4 : 0;
168 while (*++next); 173 while (*++next);
169 174
170 if (size () 175 if (size ()
171 && (vs.state == PARTIAL || vs.state == FULL)) 176 && (vs.state == PARTIAL || vs.state == FULL))
172 { 177 {
173 ctx.nz_far = max (ctx.nz_far, z);
174 display (ctx); 178 display (ctx);
175 ctx.vislist.push_back (this); 179 ctx.vislist.push_back (this);
176 } 180 }
177 181
178 return true; 182 return true;
240 else 244 else
241 { 245 {
242 if (evs.state != OCCLUDED) 246 if (evs.state != OCCLUDED)
243 { 247 {
244 sector center = ((e->a + e->b) >> 1) - ctx.orig; 248 sector center = ((e->a + e->b) >> 1) - ctx.orig;
245 GLfloat z = norm (vec3 (center)); 249 GLfloat z = length (vec3 (center));
246 ctx.pixfact = ctx.perspfact / z; 250 ctx.pixfact = ctx.perspfact / z;
251
252 ctx.nz_far = max (ctx.nz_far, z);
247 253
248 if (ctx.pass == view::DEPTH || evs.last + 1. > timer.now) 254 if (ctx.pass == view::DEPTH || evs.last + 1. > timer.now)
249 e->draw (ctx); 255 e->draw (ctx);
250 else 256 else
251 { 257 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines