ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/view.C
Revision: 1.4
Committed: Mon Oct 4 07:04:58 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.3: +12 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #include <cmath>
2    
3     #include "oct.h"
4     #include "view.h"
5    
6 root 1.2 draw_context::draw_context (view &v)
7     : v(v), l(0), mode(LIGHTED)
8 root 1.1 {
9     }
10    
11     draw_context::~draw_context ()
12     {
13     }
14    
15     bool draw_context::may_draw (entity_base *e)
16     {
17     if (drawn.find (e) != drawn.end ())
18     return false;
19    
20     drawn.insert (e);
21     return true;
22     }
23    
24     void view::draw (draw_context &ctx)
25     {
26 root 1.4 // check occlusion queries here
27    
28     ctx.generation++;
29    
30     //renormalize (orig, p);
31 root 1.3
32     if (ctx.mode == draw_context::DEPTH)
33     {
34     glEnable (GL_POLYGON_OFFSET_FILL);
35     glPolygonOffset (0, 1);
36     glDepthFunc (GL_LESS);
37     glDisable (GL_LIGHTING);
38 root 1.4 glColorMask (0, 0, 0, 0);
39 root 1.3 }
40     else
41     {
42     glDisable (GL_POLYGON_OFFSET_FILL);
43     glDrawBuffer (GL_BACK);
44     glDepthFunc (GL_LEQUAL);
45     glEnable (GL_LIGHTING);
46 root 1.4 glDepthMask (0);
47 root 1.3 }
48    
49 root 1.1 glViewport (0, 0, w, h);
50    
51     glMatrixMode (GL_PROJECTION);
52     glLoadIdentity ();
53    
54     GLdouble aspect = (GLdouble)w/h;
55 root 1.3 GLdouble zNear = 0.001;
56     GLdouble zFar = 100.;
57 root 1.1
58     GLdouble ymax = zNear * tan (fov * (M_PI / 360.0));
59     glFrustum (-ymax * aspect, ymax * aspect, -ymax, ymax, zNear, zFar);
60    
61     vec3 rz = -d;
62     vec3 rx = cross (u, rz);
63     vec3 ry = cross (rz, rx);
64    
65 root 1.3 gl_matrix &m = ctx.projection;
66     m(0,0) = rx.x; m(0,1) = rx.y; m(0,2) = rx.z; m(0,3) = 0;
67     m(1,0) = ry.x; m(1,1) = ry.y; m(1,2) = ry.z; m(1,3) = 0;
68     m(2,0) = rz.x; m(2,1) = rz.y; m(2,2) = rz.z; m(2,3) = 0;
69     m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1;
70    
71     glMultMatrixf ((GLfloat *)m.data);
72 root 1.1
73     glMatrixMode (GL_MODELVIEW);
74     glLoadIdentity ();
75 root 1.3 glTranslatef (-p.x, -p.y, -p.z);
76 root 1.1
77     world.draw (ctx);
78 root 1.4
79     ctx.drawn.clear ();
80    
81     glColorMask (1, 1, 1, 0);
82     glDepthMask (1);
83 root 1.1 }
84