const nya_math::frustum &camera::get_frustum() const { if(m_recalc_frustum) { m_recalc_frustum=false; if(nya_render::transform::get().has_orientation_matrix()) m_frustum=nya_math::frustum(get_view_matrix()*get_proj_matrix()*nya_render::transform::get().get_orientation_matrix()); else m_frustum=nya_math::frustum(get_view_matrix()*get_proj_matrix()); } return m_frustum; }
//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 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 Camera::update_view_pre() { //model_stack->push(); //update_view_buffer(); update_view_matrix(); model_stack->load_matrix(get_view_matrix()); }
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); }