///////////////////////////////////// /////////PRIVATE FUNCTIONS/////////// ///////////////////////////////////// void GLCamera::initialize( const int width, const int height, const int x, const int y, const float near, const float far, const float FOV, const glm::vec3 camPos, const glm::vec3 target, const glm::vec3 up) { m_CamPos = camPos; m_Target = target; m_up = up; m_Viewport.X = x; m_Viewport.Y = y; m_Viewport.WIDTH = width; m_Viewport.HEIGHT = height; m_zNear = near; m_zFar = far; m_FOV = FOV; m_dist = glm::length(camPos - target); m_roll = 0.0f; m_x_offset = 0; m_y_offset = 0; updateView(); updateProj(); std::cout << this; m_isInitialized = true; }
void Cam::getProj(float p_fov, float p_aspect, Mat4F& io_proj) { m_fov = p_fov; m_aspect = p_aspect; updateProj(); io_proj = m_proj; }
void CameraComponent::onUpdate(float delta) { //Event_GetWindowResolution windowResolution; //SEND_EVENT(&windowResolution); //// Calculate split screen attribute //float aspectRatio = windowResolution.getAspectRatio(); // Update rotation while(itrPlayer.hasNext()) { AttributePtr<Attribute_Player> ptr_player = itrPlayer.getNext(); AttributePtr<Attribute_Health> ptr_health = ptr_player->ptr_health; AttributePtr<Attribute_Input> ptr_input = ptr_player->ptr_input; AttributePtr<Attribute_Camera> ptr_camera = ptr_player->ptr_camera; if(ptr_health->health <= 0) { //camera->aspectRatio += delta*100; //updateProj(camera); } else { yaw(ptr_input->rotation.x, ptr_camera); pitch(ptr_input->rotation.y, ptr_camera); } //Entity* entity = itrInput.owner(); //if(entity->hasAttribute(ATTRIBUTE_CAMERA)) //{ //std::vector<Attribute_Camera*> cameras = itrCamera.getMultiple(entity->getAttributes(ATTRIBUTE_CAMERA)); //for(int i=0; i<(int)cameras.size(); i++) //{ //Attribute_Camera* camera = itrCamera.at(player->ptr_camera);//cameras.at(i); //yaw(input->rotation.x, camera); //pitch(input->rotation.y, camera); //} //} } // Recalculate view while(itrCamera.hasNext()) { AttributePtr<Attribute_Camera> ptr_camera = itrCamera.getNext(); AttributePtr<Attribute_Spatial> ptr_spatial = ptr_camera->ptr_spatial; updateView(ptr_camera); updateProj(ptr_camera); } }
void updateAspectRatio() { // Recalculate view and // resize aspect ratios of all cameras while(itrSplitScreen.hasNext()) { AttributePtr<Attribute_SplitScreen> ptr_splitScreen = itrSplitScreen.getNext(); AttributePtr<Attribute_Camera> ptr_camera = ptr_splitScreen->ptr_camera; AttributePtr<Attribute_Spatial> ptr_spatial = ptr_camera->ptr_spatial; AttributePtr<Attribute_Position> ptr_position = ptr_spatial->ptr_position; ptr_camera->aspectRatio = ptr_splitScreen->getAspectRatio(); updateProj(ptr_camera); updateView(ptr_camera); } }
void GLCamera::setParameter(const CameraParameter& param) { m_CamPos = param.cam_pos; m_Target = param.tar_pos; m_up = glm::vec3(0, 1, 0); m_Viewport.WIDTH = param.screen_width; m_Viewport.HEIGHT = param.screen_height; m_Viewport.X = 0; m_Viewport.Y = 0; m_zNear = param.near_z; m_zFar = param.far_z; m_FOV = param.fov_y; m_roll = param.roll; m_x_offset = param.offset_x; m_y_offset = param.offset_y; updateProj(); updateView(); }
void GLCamera::zoomOut() { m_FOV = glm::max(0.1f, m_FOV - (glm::pi<float>() / 100)); updateProj(); }
void GLCamera::zoomIn() { m_FOV = glm::min(glm::pi<float>() / 2, m_FOV + (glm::pi<float>() / 100)); updateProj(); }
void GLCamera::setFOV(const float fov) { m_FOV = fov; updateProj(); }
void GLCamera::setNear(const float f) { m_zNear = f; updateProj(); }
void GLCamera::setViewPort(const int x, const int y, const int width, const int height) { m_Viewport.X = x; m_Viewport.Y = y; m_Viewport.WIDTH = width; m_Viewport.HEIGHT = height; updateProj(); }
void GLCamera::resize(const int width, const int height) { m_Viewport.WIDTH = width; m_Viewport.HEIGHT = height; updateProj(); }