… | |
… | |
25 | { |
25 | { |
26 | // check occlusion queries here |
26 | // check occlusion queries here |
27 | |
27 | |
28 | ctx.generation++; |
28 | ctx.generation++; |
29 | |
29 | |
30 | //renormalize (orig, p); |
30 | renormalize (orig, p); |
31 | |
31 | |
32 | if (ctx.mode == draw_context::DEPTH) |
32 | if (ctx.mode == draw_context::DEPTH) |
33 | { |
33 | { |
34 | glEnable (GL_POLYGON_OFFSET_FILL); |
34 | glEnable (GL_POLYGON_OFFSET_FILL); |
35 | glPolygonOffset (0, 1); |
35 | glPolygonOffset (0, 1); |
… | |
… | |
50 | |
50 | |
51 | glMatrixMode (GL_PROJECTION); |
51 | glMatrixMode (GL_PROJECTION); |
52 | glLoadIdentity (); |
52 | glLoadIdentity (); |
53 | |
53 | |
54 | GLdouble aspect = (GLdouble)w/h; |
54 | GLdouble aspect = (GLdouble)w/h; |
55 | GLdouble zNear = 0.001; |
55 | GLdouble zNear = 0.1; |
56 | GLdouble zFar = 100.; |
56 | GLdouble zFar = 50.; |
57 | |
57 | |
58 | GLdouble ymax = zNear * tan (fov * (M_PI / 360.0)); |
58 | GLdouble ymax = zNear * tan (fov * (M_PI / 360.0)); |
59 | glFrustum (-ymax * aspect, ymax * aspect, -ymax, ymax, zNear, zFar); |
59 | glFrustum (-ymax * aspect, ymax * aspect, -ymax, ymax, zNear, zFar); |
60 | |
60 | |
|
|
61 | d = normalize (d);//D |
|
|
62 | u = normalize (u);//D |
61 | vec3 rz = -d; |
63 | vec3 rz = -d; |
62 | vec3 rx = cross (u, rz); |
64 | vec3 rx = cross (u, rz); |
63 | vec3 ry = cross (rz, rx); |
65 | vec3 ry = cross (rz, rx); |
64 | |
66 | |
65 | gl_matrix &m = ctx.projection; |
67 | 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; |
68 | m(0,0) = rx.x; m(0,1) = rx.y; m(0,2) = rx.z; m(0,3) = -p.x; |
67 | m(1,0) = ry.x; m(1,1) = ry.y; m(1,2) = ry.z; m(1,3) = 0; |
69 | m(1,0) = ry.x; m(1,1) = ry.y; m(1,2) = ry.z; m(1,3) = -p.y; |
68 | m(2,0) = rz.x; m(2,1) = rz.y; m(2,2) = rz.z; m(2,3) = 0; |
70 | m(2,0) = rz.x; m(2,1) = rz.y; m(2,2) = rz.z; m(2,3) = -p.z; |
69 | m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1; |
71 | m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1; |
70 | |
72 | |
71 | glMultMatrixf ((GLfloat *)m.data); |
73 | glMultMatrixf ((GLfloat *)m.data); |
72 | |
74 | |
|
|
75 | //glTranslatef (-p.x, -p.y, -p.z); |
|
|
76 | |
|
|
77 | glGetFloatv (GL_PROJECTION_MATRIX, (GLfloat *)&m); |
|
|
78 | |
|
|
79 | ctx.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) ); |
|
|
80 | ctx.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) ); |
|
|
81 | ctx.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) ); |
|
|
82 | ctx.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) ); |
|
|
83 | ctx.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) ); |
|
|
84 | ctx.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) ); |
|
|
85 | |
73 | glMatrixMode (GL_MODELVIEW); |
86 | glMatrixMode (GL_MODELVIEW); |
74 | glLoadIdentity (); |
87 | glLoadIdentity (); |
75 | glTranslatef (-p.x, -p.y, -p.z); |
|
|
76 | |
88 | |
77 | world.draw (ctx); |
89 | world.draw (ctx); |
78 | |
90 | |
79 | ctx.drawn.clear (); |
91 | ctx.drawn.clear (); |
80 | |
92 | |
81 | glColorMask (1, 1, 1, 0); |
93 | glColorMask (1, 1, 1, 0); |
82 | glDepthMask (1); |
94 | glDepthMask (1); |
83 | } |
95 | } |
84 | |
96 | |
|
|
97 | |