Exemplo n.º 1
0
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();
	}
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
  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);
  }
Exemplo n.º 4
0
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);
  }
}
Exemplo n.º 5
0
  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);
  }
Exemplo n.º 6
0
  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);
  }
Exemplo n.º 7
0
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);
}
Exemplo n.º 8
0
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);
}