Frustum Camera::get_frustum(float aspect) const { //calculate the current mat4 view_proj = get_projection_matrix(aspect) * SceneObject::get_world_to_local(); Frustum f(view_proj); return f; }
const nya_math::mat4 &transform::get_modelviewprojection_matrix() const { if(!m_recalc_mvp) return m_modelviewproj; m_modelviewproj=m_modelview*get_projection_matrix(); m_recalc_mvp=false; return m_modelviewproj; }
//DEBUG static void render_axes() { glUseProgram(0); glDisable(GL_LIGHTING); glLineWidth(10.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glLoadTransposeMatrixf(get_projection_matrix().m[0]); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glLoadTransposeMatrixf(get_view_matrix().m[0]); glBegin(GL_LINES); glColor3f(1, 0, 0); glVertex3f(30000, 0, 0); glVertex3f(-30000, 0, 0); glEnd(); glBegin(GL_LINES); glColor3f(0, 1, 0); glVertex3f(0, -30000, 0); glVertex3f(0, 30000, 0); glEnd(); glBegin(GL_LINES); glColor3f(0, 0, 1); glVertex3f(0, 0, 30000); glVertex3f(0, 0, -30000); glEnd(); glBegin(GL_LINE_LOOP); for (int i = 0; i < 360; i++){ float degInRad = DEG_TO_RAD(i); glVertex3f(cos(degInRad) * 10, sin(degInRad) * 10, 0); } glEnd(); glBegin(GL_LINE_LOOP); glColor3f(0, 1, 0); for (int i = 0; i < 360; i++){ float degInRad = DEG_TO_RAD(i); glVertex3f(cos(degInRad) * 10, 0, sin(degInRad) * 10); } glEnd(); glBegin(GL_LINE_LOOP); glColor3f(1, 0, 0); for (int i = 0; i < 360; i++){ float degInRad = DEG_TO_RAD(i); glVertex3f(0, cos(degInRad) * 10, sin(degInRad) * 10); } glEnd(); glEnable(GL_LIGHTING); }
void transform::set_projection_matrix(const nya_math::mat4 &mat) { m_projection=mat, m_recalc_mvp=true; if(m_has_orientation) m_orientated_proj=m_projection*m_orientation; #ifndef MANUAL_MATRICES_ASSIGN glMatrixMode(GL_PROJECTION); glLoadMatrixf(get_projection_matrix().m[0]); #endif }
void setup_gl_matrices() { #ifdef USE_OLDGL Matrix4x4 modelview = get_world_matrix() * get_view_matrix(); Matrix4x4 proj = get_projection_matrix(); Matrix4x4 tex = get_texture_matrix(); glMatrixMode(GL_TEXTURE); glLoadTransposeMatrixf(tex[0]); glMatrixMode(GL_PROJECTION); glLoadTransposeMatrixf(proj[0]); glMatrixMode(GL_MODELVIEW); glLoadTransposeMatrixf(modelview[0]); #endif }
void GameScreen::shadow_render_pass(bool ovr, long time) { RenderTarget *rtarg; if (ovr){ rtarg = &game::engine::ovr_manager.get_ovr_render_target(); } else{ rtarg = &game::engine::rtarg; } game::engine::rndr_pass_type = RNDR_PASS_SHADOW; Matrix4x4 orig_proj = get_projection_matrix(); Matrix4x4 orig_view = get_view_matrix(); Vector3 l_pos = Vector3(500, 500, -500); Vector3 l_target = -l_pos; glCullFace(GL_FRONT); rtarg->bind(RT_SHADOW); glClearColor(0, 1, 0, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Matrix4x4 l_proj; l_proj.set_perspective(DEG_TO_RAD(6.0), 1.0, 600, 890); set_projection_matrix(l_proj); glViewport(0, 0, game::engine::rtarg.get_shad_tex_width(), game::engine::rtarg.get_shad_tex_height()); Matrix4x4 l_view; l_view.set_lookat(l_pos, l_target, Vector3(0, 1, 0)); set_view_matrix(l_view); shad_mat.reset_identity(); shad_mat = l_proj * l_view; glColorMask(0, 0, 0, 0); game::engine::current_sdr = game::engine::depth_pass_sdr; game::engine::active_stage->render(STAGE_RENDER_ENEMIES, time); glColorMask(1, 1, 1, 1); rtarg->unbind(); /*2nd shadow pass*/ game::engine::rtarg2.bind(RT_SHADOW); glClearColor(0, 1, 0, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); l_proj.reset_identity(); l_proj.set_perspective(DEG_TO_RAD(0.4), 1.0, 600, 890); set_projection_matrix(l_proj); glViewport(0, 0, game::engine::rtarg2.get_shad_tex_width(), game::engine::rtarg2.get_shad_tex_height()); l_view.reset_identity(); l_view.set_lookat(l_pos, l_target, Vector3(0, 1, 0)); set_view_matrix(l_view); shad_mat2.reset_identity(); shad_mat2 = l_proj * l_view; glColorMask(0, 0, 0, 0); game::engine::active_stage->render(STAGE_RENDER_GUNS | STAGE_RENDER_COCKPIT, time); glColorMask(1, 1, 1, 1); game::engine::rtarg2.unbind(); /*------------------------------------------------------------*/ set_projection_matrix(orig_proj); set_view_matrix(orig_view); glViewport(0, 0, game::engine::rtarg.get_fb_width(), game::engine::rtarg.get_fb_height()); glCullFace(GL_BACK); }