void TrackingCamera::TrackBody() { if(solar_system_bodies != nullptr && !solar_system_bodies->empty()) { try { solar_system_body_weak_ptr = solar_system_bodies->at(tracked_body_index); if(!solar_system_body_weak_ptr.expired()) { solar_system_body_shared_ptr = solar_system_body_weak_ptr.lock(); if(!calculated_min_max_distance_from_body_surface) { minimum_distance_from_body_surface = solar_system_body_shared_ptr->GetRadius() * 5.0; maximum_distance_from_body_surface = minimum_distance_from_body_surface + 5.0; distance_from_body_surface = minimum_distance_from_body_surface + 2.5; calculated_min_max_distance_from_body_surface = true; } tracked_body_position = solar_system_body_shared_ptr->GetDistanceFromSolarSystemOrigin(); eye_position = tracked_body_position; vector_from_tracked_body_to_camera.x = 0.0; vector_from_tracked_body_to_camera.z = distance_from_body_surface; vector_from_tracked_body_to_camera = glm::rotate(vector_from_tracked_body_to_camera, M_PI * (x_rotation_degrees / 180.0), glm::dvec3(0.0, 1.0, 0.0)); eye_position += vector_from_tracked_body_to_camera; solar_system_body_shared_ptr.reset(); PositionCamera(); } else { solar_system_bodies->erase(solar_system_bodies->begin() + tracked_body_index); calculated_min_max_distance_from_body_surface = false; std::size_t solar_system_body_count = solar_system_bodies->size(); if(tracked_body_index >= solar_system_body_count) { tracked_body_index = 0u; } } } catch(std::out_of_range &ex) { calculated_min_max_distance_from_body_surface = false; tracked_body_index = 0u; } } }
void MoveViewTimerCB(long,short,C_Base *control) { if(gUIViewer == NULL) return; if(control->GetUserNumber(_UI95_TIMER_COUNTER_) < 1) { if(Recon.Direction == 0)// && TheLoader.LoaderQueueEmpty()) return; Recon.Heading += Recon.Direction; if(Recon.Heading >= 360.0f) Recon.Heading-=360.0f; if(Recon.Heading < 0) Recon.Heading+=360.0f; PositionCamera(&Recon,control->Parent_,0); control->SetUserNumber(_UI95_TIMER_COUNTER_,control->GetUserNumber(_UI95_TIMER_DELAY_)); } control->SetUserNumber(_UI95_TIMER_COUNTER_,control->GetUserNumber(_UI95_TIMER_COUNTER_)-1); }
void Fenettre::RenderMe() { #if FRAME_TIME <= 0 sf::Clock clock; #endif bool run = false; PositionCamera(); while(isOpen()) { sf::Event event; while(pollEvent(event)) { if (event.type == sf::Event::Closed) { close(); } else if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) { close(); } else if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space)) { run = !run; } else if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::R)) { camera->setPosition(btVector3(-100,50,0)); } // Adjust the viewport when the window is resized else if (event.type == sf::Event::Resized) { glViewport(0, 0, event.size.width, event.size.height); } else if (run && event.type == sf::Event::MouseMoved) { camera->MouseMoved(); } else if (run && event.type == sf::Event::MouseWheelMoved) { camera->MouseWheelMoved(event); } else if (run && event.type == sf::Event::MouseButtonPressed) { shootBox(camera->GetCible()); } } // Clear color and depth buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Update dynamics if (run) { #if FRAME_TIME <= 0 World->stepSimulation(clock.GetElapsedTime()); camera->animate(clock.GetElapsedTime()); #else World->stepSimulation(1.0f/FRAME_TIME); camera->animate(1.0f/FRAME_TIME); #endif PositionCamera(); } RenderScene(); glFlush(); display(); } };