… | |
… | |
130 | //printf ("diagfact = %f\n", diagfact); |
130 | //printf ("diagfact = %f\n", diagfact); |
131 | diagfact = sqrtf (3.);//D WHY??? |
131 | diagfact = sqrtf (3.);//D WHY??? |
132 | |
132 | |
133 | glMultMatrixf (m); |
133 | glMultMatrixf (m); |
134 | glTranslatef (-p.x, -p.y, -p.z); |
134 | glTranslatef (-p.x, -p.y, -p.z); |
135 | |
135 | |
136 | glGetFloatv (GL_PROJECTION_MATRIX, m); |
136 | glGetFloatv (GL_PROJECTION_MATRIX, m); |
137 | |
137 | |
138 | 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) ); |
138 | 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) ); |
139 | frustum.r = 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) ); |
139 | frustum.r = 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) ); |
140 | frustum.b = plane ( m(3,0) + m(1,0), m(3,1) + m(1,1), m(3,2) + m(1,2), m(3,3) + m(1,3) ); |
140 | frustum.b = plane ( m(3,0) + m(1,0), m(3,1) + m(1,1), m(3,2) + m(1,2), m(3,3) + m(1,3) ); |
… | |
… | |
164 | |
164 | |
165 | void view::begin () |
165 | void view::begin () |
166 | { |
166 | { |
167 | generation++; |
167 | generation++; |
168 | |
168 | |
169 | glColorMask (1, 1, 1, 1); |
|
|
170 | glDepthMask (1); |
|
|
171 | glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); |
|
|
172 | |
|
|
173 | vislist.clear (); |
169 | vislist.clear (); |
174 | |
170 | |
175 | z_near = max (nz_near, 1.F); |
171 | z_near = max (nz_near, 1.F); |
176 | z_far = max (nz_far, z_near * 2.F); |
172 | z_far = max (nz_far, z_near * 2.F); |
177 | c_far = nc_far; |
173 | c_far = nc_far; |
… | |
… | |
194 | pass = p; |
190 | pass = p; |
195 | |
191 | |
196 | switch (pass) |
192 | switch (pass) |
197 | { |
193 | { |
198 | case DEPTH: |
194 | case DEPTH: |
|
|
195 | glColorMask (1, 1, 1, 1); |
|
|
196 | glDepthMask (1); |
|
|
197 | |
|
|
198 | glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); |
|
|
199 | |
|
|
200 | //glEnable (GL_STENCIL_TEST); // for depth-passes |
|
|
201 | //glStencilOp (GL_KEEP, GL_KEEP, GL_REPLACE); |
|
|
202 | //glStencilFunc (GL_LESS, 1, 255); |
|
|
203 | |
199 | //glEnable (GL_POLYGON_OFFSET_FILL); |
204 | //glEnable (GL_POLYGON_OFFSET_FILL); |
200 | //glPolygonOffset (0, 5); |
205 | //glPolygonOffset (0, 5); |
201 | glDisable (GL_MINMAX); |
206 | glDisable (GL_MINMAX); |
202 | glDepthRange (DEPTH_OFFSET, 1.); |
207 | glDepthRange (DEPTH_OFFSET, 1.); |
203 | glDepthFunc (GL_LESS); |
208 | glDepthFunc (GL_LESS); |
204 | glEnable (GL_DEPTH_TEST); |
209 | glEnable (GL_DEPTH_TEST); |
205 | glColorMask (0, 0, 0, 0); |
210 | glColorMask (0, 0, 0, 0); |
206 | glDepthMask (1); |
|
|
207 | glDisable (GL_DEPTH_CLAMP_NV); |
211 | glDisable (GL_DEPTH_CLAMP_NV); |
208 | |
212 | |
209 | world.detect_visibility (*this); |
213 | world.detect_visibility (*this); |
210 | |
214 | |
211 | break; |
215 | break; |
… | |
… | |
214 | glDepthRange (0., 1. - DEPTH_OFFSET); |
218 | glDepthRange (0., 1. - DEPTH_OFFSET); |
215 | glDepthFunc (GL_LESS); |
219 | glDepthFunc (GL_LESS); |
216 | glColorMask (0, 0, 0, 0); |
220 | glColorMask (0, 0, 0, 0); |
217 | glDepthMask (0); |
221 | glDepthMask (0); |
218 | glEnable (GL_DEPTH_CLAMP_NV); |
222 | glEnable (GL_DEPTH_CLAMP_NV); |
|
|
223 | glDisable (GL_STENCIL_TEST); |
219 | |
224 | |
220 | // check occlusion queries |
225 | // check occlusion queries |
221 | for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) |
226 | for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) |
222 | { |
227 | { |
223 | occ_query oq(*this, i->data, ::occ_query_result (i->id)); |
228 | occ_query oq(*this, i->data, ::occ_query_result (i->id)); |
… | |
… | |
227 | occ_queries.clear (); |
232 | occ_queries.clear (); |
228 | |
233 | |
229 | break; |
234 | break; |
230 | |
235 | |
231 | case LIGHTED: |
236 | case LIGHTED: |
|
|
237 | glClear (GL_STENCIL_BUFFER_BIT); |
|
|
238 | //glEnable (GL_STENCIL_TEST); |
232 | glEnable (GL_MINMAX); |
239 | glEnable (GL_MINMAX); |
233 | glDepthRange (0., 1. - DEPTH_OFFSET); |
240 | glDepthRange (0., 1. - DEPTH_OFFSET); |
234 | glDepthFunc (GL_LESS); |
241 | glDepthFunc (GL_LESS); |
235 | glColorMask (1, 1, 1, 1); |
242 | glColorMask (1, 1, 1, 1); |
236 | glDepthMask (0); |
243 | glDepthMask (0); |