void Camera::Update() { /* // on crée un quat basé sur le vecteur right et l'angle d'élévation (ou tangage) glm::quat pitch_quat = glm::angleAxis(deltaX, camera_right); // on crée un quat basé sur le vecteur up et l'angle d'azimut (ou lacet) glm::quat yaw_quat = glm::angleAxis(deltaY, camera_up); // on addition les deux quat glm::quat tmp = glm::cross(pitch_quat, yaw_quat); tmp = glm::normalize(tmp); glm::quat view_quat = glm::quat_cast(m_ViewMatrix); glm::normalize(view_quat); view_quat = glm::cross(view_quat,tmp); glm::normalize(view_quat); m_ViewMatrix = glm::mat4_cast(view_quat);*/ rotateLocal((float)oldDeltaY * -0.5f, 1.0f, 0.0f, 0.0f); std::cout << "old: " << oldDeltaY << " et now new:" << deltaY << std::endl; deltaY = deltaY+oldDeltaY; rotateLocal((float)deltaX * 0.5f, 0.0f, 1.0f, 0.0f); rotateLocal((float) (deltaY) * 0.5f, 1.0f, 0.0f, 0.0f); oldDeltaY = deltaY; }
Transform::Transform(glm::vec3 position, glm::vec3 eulerAngles, glm::vec3 scale) { this->position = position; this->scale = scale; // Store euler angles this->eulerAngles = eulerAngles; // Rotate into position rotateLocal(eulerAngles.z, glm::vec3(0.0f, 0.0f, 1.0f)); rotateLocal(eulerAngles.y, glm::vec3(0.0f, 1.0f, 0.0f)); rotateLocal(eulerAngles.x, glm::vec3(1.0f, 0.0f, 0.0f)); }
void SE_Camera::rotateLocal(float angle, SE_AXIS_TYPE axis) { SE_Quat q; switch(axis) { case SE_AXIS_X: q.set(angle, SE_Vector3f(1, 0, 0)); break; case SE_AXIS_Y: q.set(angle, SE_Vector3f(0, 1, 0)); break; case SE_AXIS_Z: q.set(angle, SE_Vector3f(0, 0, 1)); break; } return rotateLocal(q); }
void MxCore::rotate( double angle, const osg::Vec3d& axis ) { osg::notify( osg::WARN ) << "MxCore::rotate() is deprecated. Use rotateLocal() instead." << std::endl; rotateLocal( angle, axis ); }