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

Comparing libgender/oct.C (file contents):
Revision 1.33 by root, Fri Oct 8 09:45:25 2004 UTC vs.
Revision 1.34 by root, Fri Oct 8 09:59:25 2004 UTC

57 delete sub[fill]; 57 delete sub[fill];
58} 58}
59 59
60static bool overlap (const sector &o1, uoffs ea, const sector &a, const sector &b) 60static bool overlap (const sector &o1, uoffs ea, const sector &a, const sector &b)
61{ 61{
62 sector a2, b2;
63
64 ea /= 2; 62 ea /= 2;
65 63
66 a2 = o1 + ea; 64 sector center_1 = o1 + ea;
67 b2 = (a + b) / 2; 65 sector size_2 = b - a;
66 sector center_2 = a + size_2 / 2;
68 67
69 return abs (a2 - b2) <= ea + (b - a); 68 return abs (center_1 - center_2) <= ea + size_2;
70} 69}
71 70
72void octant::add (entity *e) 71void octant::add (entity *e)
73{ 72{
74 const sector &a = e->a; 73 const sector &a = e->a;
75 const sector &b = e->b; 74 const sector &b = e->b;
76 75
77 if (overlap (orig, extent, a, b)) 76 if (overlap (orig, extent, a, b))
78 { 77 {
79 uoffs extent2 = extent / 2; 78 uoffs extent2 = extent / 2;
80
81 uoffs size = max (abs (b.x - a.x), 79 uoffs size = max (abs (b - a));
82 max (abs (b.y - a.y),
83 abs (b.z - a.z)));
84 80
85 if (size > extent2 || !extent2) 81 if (size > extent2 || !extent2)
86 { 82 {
87 push_back (e); 83 push_back (e);
88 e->o.push_back (this); 84 e->o.push_back (this);
114 visibility_state &vs = ctx.vismap[this]; 110 visibility_state &vs = ctx.vismap[this];
115 111
116 if (vs.generation != ctx.generation) 112 if (vs.generation != ctx.generation)
117 vs.visibility = visibility_state::UNKNOWN; 113 vs.visibility = visibility_state::UNKNOWN;
118 114
119 const sector &cam = ctx.orig; 115 if (orig <= ctx.orig && ctx.orig <= orig + extent)
120#if 1
121 if (orig <= cam && cam <= orig + extent)
122 { 116 {
123 vs.visibility = visibility_state::PARTIAL; 117 vs.visibility = visibility_state::PARTIAL;
124 vs.generation = ctx.generation; 118 vs.generation = ctx.generation;
125 } 119 }
126 else 120 else
127#endif
128 { 121 {
129 point center ( 122 sector center_s (orig + extent / 2 - ctx.orig);
130 orig.x + (soffs)extent / 2 - cam.x, 123 point center (center_s.x, center_s.y, center_s.z);
131 orig.y + (soffs)extent / 2 - cam.y,
132 orig.z + (soffs)extent / 2 - cam.z
133 );
134 124
135 GLfloat dia = (2. * sqrtf (3))*(GLfloat)extent; 125 GLfloat dia = (2. * sqrtf (3))*(GLfloat)extent;
136 126
137 if (ctx.frustum.t.distance (center) < -dia) return; 127 if (ctx.frustum.t.distance (center) < -dia) return;
138 if (ctx.frustum.b.distance (center) < -dia) return; 128 if (ctx.frustum.b.distance (center) < -dia) return;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines