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));
	}
Beispiel #3
0
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);
}
Beispiel #4
0
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 );
}