void bc_icamera::set_look_at(const core::bc_vector3f& p_position, const core::bc_vector3f& p_lookat, const core::bc_vector3f& p_up) noexcept { m_position = p_position; m_lookat = p_lookat; create_view_matrix(p_up); }
void gr_set_view_matrix(const vec3d *pos, const matrix *orient) { Assert(modelview_matrix_depth == 1); gr_view_matrix = create_view_matrix(pos, orient); gr_model_matrix_stack.clear(); gr_model_view_matrix = gr_view_matrix; if (Cmdline_env) { gr_env_texture_matrix_set = true; // setup the texture matrix which will make the the envmap keep lined // up properly with the environment // r.xyz <-- r.x, u.x, f.x gr_env_texture_matrix.a1d[0] = gr_model_view_matrix.a1d[0]; gr_env_texture_matrix.a1d[1] = gr_model_view_matrix.a1d[4]; gr_env_texture_matrix.a1d[2] = gr_model_view_matrix.a1d[8]; // u.xyz <-- r.y, u.y, f.y gr_env_texture_matrix.a1d[4] = gr_model_view_matrix.a1d[1]; gr_env_texture_matrix.a1d[5] = gr_model_view_matrix.a1d[5]; gr_env_texture_matrix.a1d[6] = gr_model_view_matrix.a1d[9]; // f.xyz <-- r.z, u.z, f.z gr_env_texture_matrix.a1d[8] = gr_model_view_matrix.a1d[2]; gr_env_texture_matrix.a1d[9] = gr_model_view_matrix.a1d[6]; gr_env_texture_matrix.a1d[10] = gr_model_view_matrix.a1d[10]; gr_env_texture_matrix.a1d[15] = 1.0f; } modelview_matrix_depth = 2; htl_view_matrix_set = true; }
bc_icamera::bc_icamera(bcUINT16 p_back_buffer_width, bcUINT16 p_back_buffer_height, bcFLOAT p_near_clip, bcFLOAT p_far_clip) noexcept : m_screen_width(p_back_buffer_width), m_screen_height(p_back_buffer_height), m_near(p_near_clip), m_far(p_far_clip), m_position(core::bc_vector3f(0, 0, 0)), m_lookat(core::bc_vector3f(0, 0, 1)) { create_view_matrix(); auto* l_event_manager = core::bc_get_service<core::bc_event_manager>(); m_key_listener_handle = l_event_manager->register_event_listener< platform::bc_app_event_key > ( core::bc_event_manager::delegate_type(this, &bc_icamera::on_key) ); m_pointing_listener_handle = l_event_manager->register_event_listener< platform::bc_app_event_pointing > ( core::bc_event_manager::delegate_type(this, &bc_icamera::on_pointing) ); }