void FlyingCamera::move_forward(GLfloat distance) {
  glm::mat3 rotation = glm::mat3_cast(get_forward());
  // The order of multiplication is reversed... now it seems to be working quite fine.
  glm::vec3 axis_of_motion = get_forward_dir()*rotation;
  // axis_of_motion should be normalized
  glm::vec3 position3 = glm::vec3(get_position().x,get_position().y,get_position().z);
  glm::vec3 new_position = position3 + axis_of_motion*distance;
  set_position(glm::vec4(new_position.x,new_position.y,new_position.z,1));

}
		void bc_perspective_camera::get_extend_points(extend& p_points) const
		{
			auto l_fov_tan = 2 * std::tanf(m_field_of_view / 2);
			auto l_near_clip_height = l_fov_tan * get_near_clip();
			auto l_near_clip_width = l_near_clip_height * m_aspect_ratio;
			auto l_far_clip_height = l_fov_tan * get_far_clip();
			auto l_far_clip_width = l_far_clip_height * m_aspect_ratio;

			auto l_near_clip_center = get_position() + get_forward() * get_near_clip();
			auto l_far_clip_center = get_position() + get_forward() * get_far_clip();

			p_points[0] = l_near_clip_center + get_left() * (l_near_clip_width / 2) + get_down() * (l_near_clip_height / 2);
			p_points[1] = l_near_clip_center + get_left() * (l_near_clip_width / 2) + get_up() * (l_near_clip_height / 2);
			p_points[2] = l_near_clip_center + get_right() * (l_near_clip_width / 2) + get_up() * (l_near_clip_height / 2);
			p_points[3] = l_near_clip_center + get_right() * (l_near_clip_width / 2) + get_down() * (l_near_clip_height / 2);
			p_points[4] = l_far_clip_center + get_left() * (l_far_clip_width / 2) + get_down() * (l_far_clip_height / 2);
			p_points[5] = l_far_clip_center + get_left() * (l_far_clip_width / 2) + get_up() * (l_far_clip_height / 2);
			p_points[6] = l_far_clip_center + get_right() * (l_far_clip_width / 2) + get_up() * (l_far_clip_height / 2);
			p_points[7] = l_far_clip_center + get_right() * (l_far_clip_width / 2) + get_down() * (l_far_clip_height / 2);
		}
	void geometry2d_renderer::render(renderer_ptr render)
	{
		if (game_obj_.expired())
		{
			return;
		}
		auto obj = game_obj_.lock();
		if (!obj->get_active())
		{
			return;
		}
		auto trans = obj->get_component<transform2d>();
		assert_return((trans != nullptr));

		if (geo_type_ == gt_none)
		{
			return;
		}
		
		vert_buf_.clear();
		if (geo_type_ == gt_polygon)
		{
			auto mat = matrix3::make_transform(trans->get_pos(), trans->get_scale(), trans->get_forward());
			for (auto vt : geo_data_.vertices)
			{
				vert_buf_.push_back(mat * vt);
			}
		}
		else if (geo_type_ == gt_circle)
		{
			static const int vert_cnt = 180;
			float scale_factor = 100.0f;
			vec2 scale = trans->get_scale();
			vec2 pos = trans->get_pos();
			for (int i = 0; i < vert_cnt; ++i)
			{
				float delta = 360.0f / vert_cnt;
				float rad = (float)(i * delta * PI) / 180.0f;
				vec2 pt;
				pt.x = scale_factor * cosf(rad) * geo_data_.radius * scale.x / scale_factor + pos.x;
				pt.y = scale_factor * sinf(rad) * geo_data_.radius * scale.y / scale_factor + pos.y;
				vert_buf_.push_back(pt);
			}
			vec2 st = vert_buf_[0];
			vert_buf_.push_back(st);
		}
		else
		{
			return;
		}
		render->set_draw_color(vert_color_);
		render->draw_polygon(vert_buf_);
	}
HeapPtr par_evacuate(HeapPtr heapcell, deque *deq, int me) {
 switch(heapcell[0])
 {
  case SIMPLE_OBJECT:
   SimpleObject *sobj = (SimpleObject *)par_allocToSpace(vmsizeof(SimpleObject), heapcell, me);
   if(!sobj) return (HeapPtr)get_forward(heapcell);
   *sobj = *((SimpleObject *)heapcell);
   return sobj;

  case POINTER_OBJECT:
   PointerObject pobj = (PointerObject *)par_allocToSpace(objsize(heapcell), heapcell, me);
   if(!pobj) return (HeapPtr)get_forward(heapcell);
   *pobj = *((PointerObject *)heapcell);

   pobj->pointers = pobj + vmsizeof(PointerObject);
   for(int i = 0; i < pobj->sizePoint; i++)
   {
    pobj->pointers[i] = ((PointerObject *)heapcell)->pointers[i];
    deque_push_bottom(deq, &pobj->pointers[i]);
   }
   return pobj;
 }
}
		core::bc_vector3f bc_icamera::get_back() const noexcept
		{
			return get_forward() * -1;
		}
void graph_miner_mpi_dyn::regenerate_embeddings(Projected &projected, int dfs_level)
{
  // We don't need to check if the pattern is frequent or minimal

  DEBUG(*(graph_miner::logger), "DFS level inside regenerate embeddings = " << dfs_level << " queue size = " << dfs_task_queue[dfs_level].size());

  //not necessary though, as task split is not done while regenerating embeddings

  //current_dfs_level = dfs_level + 1;

  //iterate for all in the task_queue

  for(int i = 0; dfs_task_queue[dfs_level].size() > 0; i++) {

    types::DFS dfs = dfs_task_queue[dfs_level].front();
    dfs_task_queue[dfs_level].pop_front();

    current_dfs_level = dfs_level;
    load_balance();

    DFS_CODE.push(dfs.from, dfs.to, dfs.fromlabel, dfs.elabel, dfs.tolabel);

    DEBUG(*(graph_miner::logger), "*****regenerating embeddings for code: " << DFS_CODE.to_string() );

    //const RMPath &rmpath = DFS_CODE.buildRMPath();
    //int minlabel = DFS_CODE[0].fromlabel;
    //int maxtoc = DFS_CODE[rmpath[0]].to;

    Projected new_root;

    for(unsigned int n = 0; n < projected.size(); ++n) {

      unsigned int id = projected[n].id;
      PDFS *cur = &projected[n];
      History history(graph, cur);

      if(dfs.is_backward() ) {
        Edge *e = get_backward(graph, DFS_CODE, history);
        if(e)
          new_root.push(id, e, cur);
      }else{
        types::EdgeList edges;
        if(get_forward(graph, DFS_CODE, history, edges)) {
          for(types::EdgeList::iterator it = edges.begin(); it != edges.end(); ++it) {
            new_root.push(id, *it, cur);
          }
        }
      }
    }

    if( embeddings_regeneration_level > dfs_level ) {
      regenerate_embeddings(new_root, dfs_level + 1);
    }else{
      //regeneration of embeddings ended
      //now perform regular extensions with project function
      //reset embeddings_regeneration_level
      //embeddings_regeneration_level = 0;
      project(new_root, dfs_level + 1);
    }

    DFS_CODE.pop();

  }
  //current_dfs_level = dfs_level;

  return;
}
		void bc_free_camera::update(core_platform::bc_clock::update_param p_clock_update_param,
			const platform::bc_pointing_device& p_pointing_device,
			const platform::bc_key_device& p_key_device)
		{
			core::bc_vector3f l_position = get_position();
			bcFLOAT l_move_speed = m_shift_pressed ? m_move_speed * 6 : m_ctrl_pressed ? m_move_speed * 0.25 : m_move_speed;
			bcFLOAT l_rotate_speed = m_rotate_speed;

			l_move_speed *= p_clock_update_param.m_elapsed_second;
			l_rotate_speed *= p_clock_update_param.m_elapsed_second;

			if (m_w_pressed)
			{
				l_position += get_forward() * l_move_speed;
			}
			if (m_s_pressed)
			{
				l_position += get_back() * l_move_speed;
			}
			if (m_a_pressed)
			{
				l_position += get_left() * l_move_speed;
			}
			if (m_d_pressed)
			{
				l_position += get_right() * l_move_speed;
			}
			if (m_e_pressed)
			{
				l_position += get_down() * l_move_speed;
			}
			if (m_q_pressed)
			{
				l_position += get_up() * l_move_speed;
			}

			core::bc_vector3f l_direction = get_direction();

			if (m_rmb_pressed)
			{
				bcFLOAT l_pi = 3.14159265358979323846 / 2;
				auto l_dx = -m_dx * l_rotate_speed;
				auto l_dy = m_dy * l_rotate_speed;

				if (m_dy > l_pi)
				{
					m_dy = l_pi;
				}
				if (m_dy < -l_pi)
				{
					m_dy = -l_pi;
				}

				core::bc_matrix3f l_rotation_y;
				core::bc_matrix3f l_rotation_x;
				core::bc_matrix3f l_rotation;

				core::bc_vector3f l_right = get_right();
				core::bc_vector3f l_up = get_up();

				if(graphic::bc_render_api_info::is_left_handed())
				{
					l_rotation_y.rotation_euler_lh(l_up, -l_dx);
					l_rotation_x.rotation_euler_lh(l_right, l_dy);
				}
				else
				{
					l_rotation_y.rotation_euler_rh(l_up, -l_dx);
					l_rotation_x.rotation_euler_rh(l_right, l_dy);
				}
				l_rotation = l_rotation_y * l_rotation_x;

				l_direction = l_rotation * l_direction;
				l_direction.normalize();
			}

			auto l_lookat = l_position + l_direction;

			set_look_at(l_position, l_lookat, core::bc_vector3f(0, 1, 0));

			m_dx = 0;
			m_dy = 0;
		}
void FlyingCamera::roll(GLfloat angle) {
  glm::fquat quaternion = create_quaternion(get_forward_dir(),angle);
  set_up(quaternion*get_up());
  set_forward(quaternion * get_forward());
}
void FlyingCamera::pitch(GLfloat angle) {
  glm::fquat quaternion = create_quaternion(glm::cross(get_forward_dir(),get_up_dir()),angle);
  set_forward(quaternion*get_forward());
  set_up(quaternion*get_up());
}
Exemple #10
0
 void Camera::move_forward_xy(const float &distance) {
   position += get_forward().get_ij().normalized() * distance;
 }
Exemple #11
0
 void Camera::adjust_roll(const float &rho) {
   orientation = Quaternion::Axis_Angle(get_forward(), rho) * orientation;
 }