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

Comparing libgender/view.C (file contents):
Revision 1.84 by root, Thu Jan 6 03:09:24 2005 UTC vs.
Revision 1.85 by root, Mon Feb 7 08:16:31 2005 UTC

120{ 120{
121 renormalize (orig, p); 121 renormalize (orig, p);
122 122
123 glViewport (0, 0, w, h); 123 glViewport (0, 0, w, h);
124 124
125 glMatrixMode (GL_PROJECTION);
126
127 GLdouble aspect = (GLdouble)w/h; 125 GLdouble aspect = (GLdouble)w/h;
128 GLdouble ftan = tanf (fov * GLfloat (.5 * M_PI / 180.)); 126 GLdouble ftan = tanf (fov * GLfloat (.5 * M_PI / 180.));
129 GLdouble ymax = ftan; 127 GLdouble ymax = ftan;
130 GLdouble xmax = ymax * aspect; 128 GLdouble xmax = ymax * aspect;
131 129
140 138
141 glLoadMatrixf (perspective); 139 glLoadMatrixf (perspective);
142 } 140 }
143 //glFrustum (-xmax, xmax, -ymax, ymax, z_near, z_far); 141 //glFrustum (-xmax, xmax, -ymax, ymax, z_near, z_far);
144 142
145 glGetFloatv (GL_PROJECTION_MATRIX, perspective); 143 //glGetFloatv (GL_PROJECTION_MATRIX, perspective);
146 144
147 perspfact = z_near / ymax * 0.5F * h; 145 perspfact = z_near / ymax * 0.5F * h;
148 146
149 glMatrixMode (GL_MODELVIEW); 147 matrix view;
150 glLoadIdentity (); 148 {
151 matrix &m = projection; 149 matrix &m = view;
152 150
153 d = normalize (d);//D 151 d = normalize (d);//D
154 u = normalize (u);//D 152 u = normalize (u);//D
155 153
156 vec3 rz = -d; 154 vec3 rz = -d;
157 vec3 rx = cross (u, rz); 155 vec3 rx = cross (u, rz);
158 vec3 ry = cross (rz, rx); 156 vec3 ry = cross (rz, rx);
159 157
160 m(0,0) = rx.x; m(0,1) = rx.y; m(0,2) = rx.z; m(0,3) = 0; 158 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; 159 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; 160 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.F; 161 m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1.F;
164 162
165 //diagfact = abs (rz.x) + abs (rz.y) + abs (rz.z); 163 //diagfact = abs (rz.x) + abs (rz.y) + abs (rz.z);
166 diagfact = sqrtf (3.F); 164 diagfact = sqrtf (3.F);
165 }
166
167 //printf ("diagfact = %f\n", diagfact); 167 //printf ("diagfact = %f\n", diagfact);
168 //diagfact = sqrtf (3.);//D WHY??? 168 //diagfact = sqrtf (3.);//D WHY???
169 //
170 view = view * matrix::translation (-p);
169 171
170 glMultMatrixf (m); 172 matrix projection = perspective * view;
171 173
172 glTranslatef (-p.x, -p.y, -p.z);
173 174 {
174 glGetFloatv (GL_MODELVIEW_MATRIX, m); 175 matrix &m = projection;
175 176
176 m = perspective * m;
177
178 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) );
179 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) ); 178 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) );
180 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) ); 179 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) );
181 frustum.t = 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) ); 180 frustum.t = 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) );
182 frustum.n = plane ( m(3,0) + m(2,0), m(3,1) + m(2,1), m(3,2) + m(2,2), m(3,3) + m(2,3) ); 181 frustum.n = plane ( m(3,0) + m(2,0), m(3,1) + m(2,1), m(3,2) + m(2,2), m(3,3) + m(2,3) );
183 frustum.f = plane ( m(3,0) - m(2,0), m(3,1) - m(2,1), m(3,2) - m(2,2), m(3,3) - m(2,3) ); 182 frustum.f = plane ( m(3,0) - m(2,0), m(3,1) - m(2,1), m(3,2) - m(2,2), m(3,3) - m(2,3) );
183 }
184 184
185#if 0 185#if 0
186 { 186 {
187 GLdouble frustlen = z_far - z_near; 187 GLdouble frustlen = z_far - z_near;
188 GLdouble fheight = frustlen * ftan; 188 GLdouble fheight = frustlen * ftan;
192 192
193 frustum.s = sphere (p + d * (.5 * frustlen), length (corner - half)); 193 frustum.s = sphere (p + d * (.5 * frustlen), length (corner - half));
194 } 194 }
195#endif 195#endif
196 196
197 {
198 GLdouble depth = h / ftan; 197 GLdouble depth = h / ftan;
199
200 frustum.c = cone (p, d, atan (sqrt (GLdouble (w * w + h * h)) * ftan)); 198 frustum.c = cone (p, d, atan (sqrt (GLdouble (w * w + h * h)) * ftan));
201 } 199
200 glMatrixMode (GL_PROJECTION);
201 glLoadMatrixf (projection);
202
203 glMatrixMode (GL_MODELVIEW);
204 glLoadIdentity ();
202} 205}
203 206
204void view::begin () 207void view::begin ()
205{ 208{
206 generation++; 209 generation++;
326 } 329 }
327 330
328 drawn.clear (); 331 drawn.clear ();
329} 332}
330 333
331void light::enable () 334void light::enable (view &ctx)
332{ 335{
333 lightpos->set (p); 336 lightpos->set (p - ctx.orig);
334} 337}
335 338
336void light::disable () 339void light::disable (view &ctx)
337{ 340{
338} 341}
339
340static shader::varying_1f camdist;
341static shader::varying_3f lightvec;
342 342
343void linear_light::vsh () 343void linear_light::vsh ()
344{ 344{
345 using namespace shader::compile; 345 using namespace shader::compile;
346 temp_1f camdist;
346 347
347 lightvec = xyz (lightpos - model_view_matrix * vin.vertex); 348 lightvec = xyz (lightpos - model_view_matrix * vin.vertex);
348 camdist = max (1 - length (lightvec) / radius, 0); 349 camdist = max (1 - length (lightvec) / radius, 0);
349 350
350 fsh (); 351 fsh ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines