… | |
… | |
133 | { |
133 | { |
134 | matrix &m = perspective; |
134 | matrix &m = perspective; |
135 | |
135 | |
136 | m(0,0) = 1.F / xmax; m(0,1) = 0; m(0,2) = 0; m(0,3) = 0; |
136 | m(0,0) = 1.F / xmax; m(0,1) = 0; m(0,2) = 0; m(0,3) = 0; |
137 | m(1,0) = 0; m(1,1) = 1.F / ymax; m(1,2) = 0; m(1,3) = 0; |
137 | m(1,0) = 0; m(1,1) = 1.F / ymax; m(1,2) = 0; m(1,3) = 0; |
138 | m(2,0) = 0; m(2,1) = 0; m(2,2) = -1e10F / z_far; m(2,3) = 1; |
138 | m(2,0) = 0; m(2,1) = 0; m(2,2) = -1e10F / z_far; m(2,3) = 0; |
139 | m(3,0) = 0; m(3,1) = 0; m(3,2) = -1; m(3,3) = 0; |
139 | m(3,0) = 0; m(3,1) = 0; m(3,2) = -1.F; m(3,3) = 0; |
140 | |
140 | |
141 | glLoadMatrixf (perspective); |
141 | glLoadMatrixf (perspective); |
142 | } |
142 | } |
143 | //glFrustum (-xmax, xmax, -ymax, ymax, z_near, z_far); |
143 | //glFrustum (-xmax, xmax, -ymax, ymax, z_near, z_far); |
144 | |
144 | |
… | |
… | |
155 | |
155 | |
156 | vec3 rz = -d; |
156 | vec3 rz = -d; |
157 | vec3 rx = cross (u, rz); |
157 | vec3 rx = cross (u, rz); |
158 | vec3 ry = cross (rz, rx); |
158 | vec3 ry = cross (rz, rx); |
159 | |
159 | |
160 | m(0,0) = rx.x; m(0,1) = rx.y; m(0,2) = rx.z; m(0,3) = 0; |
160 | m(0,0) = rx.x; m(0,1) = rx.y; m(0,2) = rx.z; m(0,3) = 0; |
161 | m(1,0) = ry.x; m(1,1) = ry.y; m(1,2) = ry.z; m(1,3) = 0; |
161 | m(1,0) = ry.x; m(1,1) = ry.y; m(1,2) = ry.z; m(1,3) = 0; |
162 | m(2,0) = rz.x; m(2,1) = rz.y; m(2,2) = rz.z; m(2,3) = 0; |
162 | m(2,0) = rz.x; m(2,1) = rz.y; m(2,2) = rz.z; m(2,3) = 0; |
163 | m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1; |
163 | m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1.F; |
164 | |
164 | |
165 | diagfact = abs (rz.x) + abs (rz.y) + abs (rz.z); |
165 | diagfact = abs (rz.x) + abs (rz.y) + abs (rz.z); |
166 | //printf ("diagfact = %f\n", diagfact); |
166 | //printf ("diagfact = %f\n", diagfact); |
167 | diagfact = sqrtf (3.);//D WHY??? |
167 | //diagfact = sqrtf (3.);//D WHY??? |
168 | |
168 | |
169 | glMultMatrixf (m); |
169 | glMultMatrixf (m); |
|
|
170 | |
|
|
171 | glTranslatef (-p.x, -p.y, -p.z); |
170 | |
172 | |
171 | glTranslatef (-p.x, -p.y, -p.z); |
|
|
172 | |
|
|
173 | glGetFloatv (GL_MODELVIEW_MATRIX, m); |
173 | glGetFloatv (GL_MODELVIEW_MATRIX, m); |
174 | |
174 | |
175 | m = perspective * m; |
175 | m = perspective * m; |
176 | |
176 | |
177 | frustum.l = plane ( m(3,0) + m(0,0), m(3,1) + m(0,1), m(3,2) + m(0,2), m(3,3) + m(0,3) ); |
177 | frustum.l = plane ( m(3,0) + m(0,0), m(3,1) + m(0,1), m(3,2) + m(0,2), m(3,3) + m(0,3) ); |
… | |
… | |
271 | glDepthFunc (GL_LESS); |
271 | glDepthFunc (GL_LESS); |
272 | glColorMask (0, 0, 0, 0); |
272 | glColorMask (0, 0, 0, 0); |
273 | glDepthMask (0); |
273 | glDepthMask (0); |
274 | glDisable (GL_STENCIL_TEST); |
274 | glDisable (GL_STENCIL_TEST); |
275 | glDisable (GL_CULL_FACE); |
275 | glDisable (GL_CULL_FACE); |
|
|
276 | |
|
|
277 | glEnable (GL_DEPTH_CLAMP_NV); |
276 | |
278 | |
277 | occ_query_material.enable (*this); |
279 | occ_query_material.enable (*this); |
278 | |
280 | |
279 | // check occlusion queries |
281 | // check occlusion queries |
280 | for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) |
282 | for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) |
… | |
… | |
287 | |
289 | |
288 | occ_queries.clear (); |
290 | occ_queries.clear (); |
289 | |
291 | |
290 | for (vector<octant *>::iterator i = postdepthlist.begin (); i != postdepthlist.end (); ++i) |
292 | for (vector<octant *>::iterator i = postdepthlist.begin (); i != postdepthlist.end (); ++i) |
291 | (*i)->draw_postdepth (*this); |
293 | (*i)->draw_postdepth (*this); |
|
|
294 | |
|
|
295 | glDisable (GL_DEPTH_CLAMP_NV); |
292 | |
296 | |
293 | first_lighted = true; |
297 | first_lighted = true; |
294 | |
298 | |
295 | break; |
299 | break; |
296 | |
300 | |