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

Comparing libgender/oct.C (file contents):
Revision 1.44 by root, Sat Oct 9 22:43:31 2004 UTC vs.
Revision 1.45 by root, Sun Oct 10 00:00:52 2004 UTC

80 GLfloat extent2 = 0.5F * (GLfloat)extent; 80 GLfloat extent2 = 0.5F * (GLfloat)extent;
81 point center = point (orig + (extent >> 1) - ctx.orig); 81 point center = point (orig + (extent >> 1) - ctx.orig);
82 if (extent & 1) center = center + 0.5F; 82 if (extent & 1) center = center + 0.5F;
83 GLfloat rad = ctx.diagfact * extent2; 83 GLfloat rad = ctx.diagfact * extent2;
84 84
85 if (vs.generation + 1 < ctx.generation) 85 if (vs.generation + 1 != ctx.generation)
86 vs.visibility = visibility_state::UNKNOWN; 86 vs.visibility = visibility_state::UNKNOWN;
87 87
88 vs.generation = ctx.generation; 88 vs.generation = ctx.generation;
89 89
90#if 0
91 if (orig <= ctx.orig && ctx.orig <= orig + extent) 90 if (orig <= ctx.orig && ctx.orig <= orig + extent)
92 vs.visibility = visibility_state::PARTIAL; 91 vs.visibility = visibility_state::PARTIAL;
93 else 92 else
94#endif
95 { 93 {
96 if (ctx.frustum.t.distance (center) < -rad) return; 94 if (ctx.frustum.t.distance (center) < -rad) return;
97 if (ctx.frustum.b.distance (center) < -rad) return; 95 if (ctx.frustum.b.distance (center) < -rad) return;
98 if (ctx.frustum.l.distance (center) < -rad) return; 96 if (ctx.frustum.l.distance (center) < -rad) return;
99 if (ctx.frustum.r.distance (center) < -rad) return; 97 if (ctx.frustum.r.distance (center) < -rad) return;
112 return; 110 return;
113 } 111 }
114 } 112 }
115 } 113 }
116 114
115 if (vs.visibility == visibility_state::OCCLUDED)
116 {
117 ctx.farlist.push_back (this);
118 return;
119 }
120
117 if (vs.visibility == visibility_state::UNKNOWN) 121 if (vs.visibility == visibility_state::UNKNOWN)
118 vs.visibility = visibility_state::FULL; 122 vs.visibility = visibility_state::FULL;
123
124 GLfloat z = ctx.z_near + ctx.frustum.n.distance (center) + rad;
125
126 if (vs.visibility == visibility_state::FULL)
127 ctx.nc_far = max (ctx.nc_far, z);
119 128
120 if (size () 129 if (size ()
121 && (vs.visibility == visibility_state::PARTIAL 130 && (vs.visibility == visibility_state::PARTIAL
122 || vs.visibility == visibility_state::FULL)) 131 || vs.visibility == visibility_state::FULL))
123 { 132 {
124 ctx.nextfar = max (ctx.nextfar, ctx.near + ctx.frustum.n.distance (center) + extent); 133 ctx.nz_far = max (ctx.nz_far, z);
125 ctx.vislist.push_back (this); 134 ctx.vislist.push_back (this);
126 }
127
128 if (vs.visibility == visibility_state::OCCLUDED)
129 {
130 ctx.farlist.push_back (this);
131 return;
132 } 135 }
133 136
134 // node to start with 137 // node to start with
135 unsigned char si = ctx.d.x < 0 ? 1 : 0 138 unsigned char si = ctx.d.x < 0 ? 1 : 0
136 | ctx.d.y < 0 ? 2 : 0 139 | ctx.d.y < 0 ? 2 : 0

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines