void GameScreen::reshape(int x, int y) { if (!game::options::ovr_enabled){ int new_tex_width, new_tex_height; game::engine::rtarg.set_fb_width(x * game::options::ss_factor); game::engine::rtarg.set_fb_height(y * game::options::ss_factor); glViewport(0, 0, game::engine::rtarg.get_fb_width(), game::engine::rtarg.get_fb_height()); set_unistate("st_screen_size", Vector2(game::engine::rtarg.get_fb_tex_width(), game::engine::rtarg.get_fb_height())); float aspect = (float)game::engine::rtarg.get_fb_width() / (float)game::engine::rtarg.get_fb_height(); projection_mat.set_perspective(DEG_TO_RAD(65.0), aspect, 0.1, 40000); set_projection_matrix(projection_mat); int fb_width = game::engine::rtarg.get_fb_width(); int fb_height = game::engine::rtarg.get_fb_height(); int tex_width = game::engine::rtarg.get_fb_tex_width(); int tex_height = game::engine::rtarg.get_fb_tex_height(); new_tex_width = game::utils::next_pow2(fb_width); new_tex_height = game::utils::next_pow2(fb_height); if (tex_width != new_tex_width || tex_height != new_tex_height){ game::engine::rtarg.set_fb_tex_width(new_tex_width); game::engine::rtarg.set_fb_tex_height(new_tex_height); game::engine::rtarg.resize_render_target(game::engine::rtarg.get_fb_tex_width(), game::engine::rtarg.get_fb_tex_height()); } game::engine::update_rendering_quad_tc(); } }
void Application::init_camera(CameraInfo& cameraInfo, const Matrix4x4& transform) { camera.configure(cameraInfo, screenW, screenH); canonicalCamera.configure(cameraInfo, screenW, screenH); if (gl_window) set_projection_matrix(); }
void Video::set_3d_view(const Camera &camera, const std::pair<Point2i, Point2i> &viewport) { m_3d = true; const Matrix4f view = camera.get_view_matrix(); set_view_matrix(view); const Matrix4f projection = camera.get_projection_matrix(viewport); set_projection_matrix(projection); set_viewport(viewport); }
void Application::resize(size_t w, size_t h) { screenW = w; screenH = h; camera.set_screen_size(w, h); if (gl_window) { textManager.resize(w, h); set_projection_matrix(); } if (mode != EDIT_MODE) { pathtracer->set_frame_size(w, h); } }
void GLParticlesScene::display(DisplayInfo &info) { glViewport(0, 0, info.screen.width, info.screen.height); set_projection_matrix(info); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); info.camera->bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); particle_visualizator->set_color_map(color_map); particles->render_each_with(*particle_visualizator); }
void Video::set_2d_view(const std::pair<Point2f, Point2f> &camera2d, const std::pair<Point2i, Point2i> &viewport, const bool &fix_aspect_ratio) { m_3d = false; set_viewport(calculate_viewport(camera2d, viewport, fix_aspect_ratio)); const Matrix4f view = Matrix4f::Identity(); set_view_matrix(view); const std::pair<Point2i, Point2i> &vp = get_viewport(); Point2f offset = get_pixel_offset(); offset.x *= (camera2d.second.x - camera2d.first.x) / (vp.second.x - vp.first.x); offset.y *= (camera2d.second.y - camera2d.first.y) / (vp.second.y - vp.first.y); const Matrix4f projection = Matrix4f::Orthographic(camera2d.first.x + offset.x, camera2d.second.x + offset.x, camera2d.second.y + offset.y, camera2d.first.y + offset.y, ZENI_2D_NEAR, ZENI_2D_FAR); set_projection_matrix(projection); }
void GameScreen::render_ovr() { static bool is_visible = true; if (!game::engine::ovr_initialized){ std::cout << "Ovr HMD not initialized!" << std::endl; return; } game::engine::active_stage->setup_lights(); camera = game::engine::active_stage->get_camera_matrix(); set_unistate("st_light_intensity", (float)1.0); Matrix4x4 gun_loc_mat; Matrix4x4 cockpit_loc_mat; Matrix4x4 crosshair_loc_mat; /*Gun and Cokcpit tranformations*/ XFormNode *gun_ctrl = game::engine::active_stage->get_gun_ctrl_node_ptr(); XFormNode *cockpit_ctrl = game::engine::active_stage->get_cockpit_ctrl_node_ptr(); XFormNode *crosshair_crtl = (XFormNode*)game::engine::active_stage->get_crosshair(); cockpit_loc_mat.rotate(Vector3(0, 1, 0), DEG_TO_RAD(theta)); cockpit_ctrl->set_matrix(cockpit_loc_mat.inverse()); gun_loc_mat.rotate(Vector3(1, 0, 0), DEG_TO_RAD(phi)); gun_loc_mat.rotate(Vector3(0, 1, 0), DEG_TO_RAD(theta)); gun_ctrl->set_matrix(gun_loc_mat.inverse()); crosshair_loc_mat.rotate(Vector3(1, 0, 0), DEG_TO_RAD(phi)); crosshair_loc_mat.rotate(Vector3(0, 1, 0), DEG_TO_RAD(theta)); crosshair_crtl->set_matrix(crosshair_loc_mat.inverse()); /*---------------------------------------------------------------------------*/ //Shadow render pass. shadow_render_pass(true, get_msec()); /*Render the textures of the cockpits front screens.*/ game::engine::active_stage->render(STAGE_RENDER_COCKPIT_SCRN_TEXTURES, get_msec()); if (is_visible) { game::engine::ovr_manager.calculate_eye_poses(); game::engine::ovr_manager.begin_ovr_frame(); //Update the particles. game::engine::nuc_manager->update(dt, get_msec()); game::engine::rndr_pass_type = RNDR_PASS_COLOR; for (int eye = 0; eye < 2; eye++) { OvrTransformationData xform_data = game::engine::ovr_manager.get_ovr_transformation_data_per_eye(eye); glViewport(xform_data.viewport.position.x, xform_data.viewport.position.y, xform_data.viewport.size.x, xform_data.viewport.size.y); //Send the Viewport size to the shader. set_unistate("st_screen_size", Vector2(xform_data.viewport.size.x, xform_data.viewport.size.y)); set_projection_matrix(xform_data.projection); camera->reset_identity(); camera->rotate(Vector3(0, 1, 0), DEG_TO_RAD(theta)); set_view_matrix(xform_data.view * (*camera)); /*Render calls*/ glActiveTexture(GL_TEXTURE0 + 3); glBindTexture(GL_TEXTURE_2D, game::engine::ovr_manager.get_ovr_render_target().get_depth_attachment()); glActiveTexture(GL_TEXTURE0); set_unistate("st_shadow2D_tex", 3); set_unistate("st_shadow_matrix", shad_mat); game::engine::active_stage->render(STAGE_RENDER_SKY | STAGE_RENDER_SCENES | STAGE_RENDER_ENEMIES | STAGE_RENDER_PROJECTILES, get_msec()); glActiveTexture(GL_TEXTURE0 + 3); glBindTexture(GL_TEXTURE_2D, game::engine::rtarg2.get_depth_attachment()); glActiveTexture(GL_TEXTURE0); set_unistate("st_shadow2D_tex", 3); set_unistate("st_shadow_matrix", shad_mat2); game::engine::active_stage->render(STAGE_RENDER_GUNS, get_msec()); game::engine::nuc_manager->render(RENDER_PSYS, get_msec()); game::engine::active_stage->render(STAGE_RENDER_COCKPIT | STAGE_RENDER_HOLOMAP | STAGE_RENDER_CROSSHAIR, get_msec()); /*-----------------------------------------------------------------------------------------*/ } } is_visible = game::engine::ovr_manager.submit_ovr_frame(); game::engine::ovr_manager.draw_ovr_mirror_texture(game::options::win_width, game::options::win_height); }
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); }