Exemple #1
0
void CCamera::StrafeRight ( GLfloat Distance )
{
	if (ViewDirChanged) GetViewDir();
	SF3dVector MoveVector;
	MoveVector.z = -ViewDir.x * -Distance;
	MoveVector.y = 0.0;
	MoveVector.x = ViewDir.z * -Distance;
	AddF3dVectorToVector(&Position, &MoveVector );
}
Exemple #2
0
/** 右移 **/
void Camera::strafeRight(GLfloat distance)
{
    if (m_viewDirChanged) GetViewDir();
    glm::vec3 MoveVector;
    MoveVector.z = -m_center.x * -distance;
    MoveVector.y = 0.0;
    MoveVector.x = m_center.z * -distance;
    m_eye+=MoveVector;
}
Exemple #3
0
void CCamera::MoveForwards( GLfloat Distance )
{
	if (ViewDirChanged) GetViewDir();
	SF3dVector MoveVector;
	MoveVector.x = ViewDir.x * -Distance;
	MoveVector.y = ViewDir.y * -Distance;
	MoveVector.z = ViewDir.z * -Distance;
	AddF3dVectorToVector(&Position, &MoveVector );
}
Exemple #4
0
void cCamera::Rotate(cVector3D v)
{
	RotatedX = v.x;
	RotatedY = v.y;
	RotatedZ = v.z;
	
	//ViewDirChanged = true;
	GetViewDir();
}
Exemple #5
0
void cCamera::StrafeRight ( GLfloat distance )
{
	if (ViewDirChanged) GetViewDir();
	cVector3D MoveVector;
	MoveVector.z = -ViewDir.x * -distance;
	MoveVector.y = 0.0;
	MoveVector.x = ViewDir.z * -distance;
	Position += MoveVector;
}
Exemple #6
0
void cCamera::MoveForwards( GLfloat distance )
{
	if (ViewDirChanged) GetViewDir();
	cVector3D MoveVector;
	MoveVector.x = ViewDir.x * -distance;
	MoveVector.y = ViewDir.y * -distance;
	MoveVector.z = ViewDir.z * -distance;
	Position += MoveVector;
}
Exemple #7
0
void Camera::StrafeRight ( float Distance )
{
    if (ViewDirChanged) GetViewDir();
    Point MoveVector;
    MoveVector.z = -Direction->x * -Distance;
    MoveVector.y = 0.0;
    MoveVector.x = Direction->z * -Distance;
    *Position = (*Position) + MoveVector;
}
Exemple #8
0
void Camera::MoveForwards( float Distance )
{
    if (ViewDirChanged) GetViewDir();
    Point MoveVector;
    MoveVector.x = Direction->x * -Distance;
    MoveVector.y = Direction->y * -Distance;
    MoveVector.z = Direction->z * -Distance;
    *Position = *Position + MoveVector;
}
Exemple #9
0
void Camera::moveForwards(GLfloat distance)
{
    if (m_viewDirChanged) GetViewDir();
    glm::vec3 MoveVector;
    MoveVector.x = m_center.x * -distance;
    MoveVector.y = m_center.y * -distance;
    MoveVector.z = m_center.z * -distance;

    m_eye+=MoveVector;
}
void cCamera::StrafeRight ( GLfloat distance )
{
	if (ViewDirChanged) GetViewDir();
	cVector3D MoveVector;
	MoveVector.z = -ViewDir.x * -distance;
	MoveVector.y = 0.0;
	MoveVector.x = ViewDir.z * -distance;

	if (CollidesMap(GetCollider(), Map))
		MoveVector.y = 0;
	else
		MoveVector.y = -1;
	Position.Add(MoveVector);
}
void cCamera::MoveForwards( GLfloat distance )
{
	bool col;
	if (ViewDirChanged) GetViewDir();
	cVector3D MoveVector;
	MoveVector.x = ViewDir.x * -distance;
	MoveVector.y = ViewDir.y * -distance;
	MoveVector.z = ViewDir.z * -distance;
	
	if (CollidesMap(GetCollider(), Map))
		MoveVector.y = 0;
	else
		MoveVector.y = -1;
	Position.Add(MoveVector);
}
Exemple #12
0
void CFpsCamera::UpdateCamera()
{
	float elapsed_time = _engine.elapsed_time;
	if (m_animate)
	{
		//Muevo El ojo de la camara hacia el punto destino
		m_deltaAnimTime += elapsed_time;

		float deltaMove = saturate(m_deltaAnimTime / m_animTime);
		m_lookFrom = m_startPos*(1 - deltaMove) + m_endPos*deltaMove;
		m_lookAt = m_startTarget*(1 - deltaMove) + m_endTarget*deltaMove;

		if (m_deltaAnimTime >= m_animTime)
		{
			m_animate = false;
			m_lookFrom = m_endPos;
			m_lookAt = m_endTarget;
			m_deltaAnimTime = 0;
		}
	}

	//Obtener variacion XY del mouse
	Vector3 dir = GetViewDir();
	Vector3 ndir = dir*-1;

	float beta = atan2(ndir.Y, sqrt(ndir.X*ndir.X + ndir.Z*ndir.Z))*FastMath::RADIANS_TO_DEGREES;
	float rotX = 0;
	float rotY = 0;
	if (!m_cameraBlocked)
	{
		Vector3 dm = InputManager::m_delta_mouse;

		if (InputManager::IsLButtonDown() || m_captureMouse)
		{
			//roto solo si el boton del mouse esta apretado
			rotX = dm.X * m_rotationSpeed;
			rotY = dm.Y * m_rotationSpeed;

			if (rotY + beta > 90 - 1)
			{
				rotY = 90 - beta - 1;
			}
			if (rotY + beta < -90 + 1)
			{
				rotY = -90 - beta + 1;
			}

		}

		if (dm.Z != 0)
		{
			//avanzo y retrocedo con la rueda del mouse
			float distancia = (m_lookAt - m_lookFrom).Length();
			float deltamove = dm.Z * m_wheelSpeed;

			if (distancia - deltamove < 1)
				deltamove = distancia - 1;

			m_lookFrom += dir*deltamove;
		}

		if (InputManager::IsPressed(DInputKey::Key_C))
		{
			m_endPos = m_lookFrom;
			m_endTarget = m_lookAt;
		}

		if (InputManager::IsPressed(DInputKey::Key_P))
		{
			AnimateTo(m_endPos, m_endTarget);
		}

		if (InputManager::IsPressed(DInputKey::Key_M))
		{
			m_captureMouse = !m_captureMouse;
		}

		if (m_captureMouse)
		{
			//TODO: Falta convertir el la posicion en absoluta, ahora esta relativa a la camara y no queda centrada
			SetCursorPos(_engine.screenWidth / 2, _engine.screenHeight / 2);
		}


		if (InputManager::IsWheelButtonDown())
		{
			//Hace el pan del mouse
			Vector3 delta_pan = GetLeft() * (dm.X * m_panSpeed);
			delta_pan += GetUp() * (dm.Y * m_panSpeed);
			m_lookAt += delta_pan;
			m_lookFrom += delta_pan;
		}

		if (InputManager::IsDown(DInputKey::Key_W))
		{
			Vector3 move = dir*m_moveSpeed*elapsed_time;
			//anulo el movimiento en Y
			move.Y = 0;
			m_lookAt += move;
			m_lookFrom += move;
		}

		if (InputManager::IsDown(DInputKey::Key_S))
		{
			Vector3 move = dir*-m_moveSpeed*elapsed_time;
			//anulo el movimiento en Y
			move.Y = 0;
			m_lookAt += move;
			m_lookFrom += move;
		}

		if (InputManager::IsDown(DInputKey::Key_A))
		{
			Vector3 move = GetLeft()*m_moveSpeed*elapsed_time;
			//anulo el movimiento en Y
			move.Y = 0;
			m_lookAt += move;
			m_lookFrom += move;
		}

		if (InputManager::IsDown(DInputKey::Key_D))
		{
			Vector3 move = GetLeft()*-m_moveSpeed*elapsed_time;
			//anulo el movimiento en Y
			move.Y = 0;
			m_lookAt += move;
			m_lookFrom += move;
		}

		if (InputManager::IsDown(DInputKey::Key_Space))
		{
			Vector3 move = UP_VECTOR*m_jumpSpeed*elapsed_time;
			m_lookAt += move;
			m_lookFrom += move;
		}

		if (InputManager::IsDown(DInputKey::Key_LeftControl) || InputManager::IsDown(DInputKey::Key_RightControl))
		{
			Vector3 move = UP_VECTOR*-m_jumpSpeed*elapsed_time;
			m_lookAt += move;
			m_lookFrom += move;
		}

	}

	//creo un vector perpendicular a la direccion de la camara y la direccion arriba para rotar sonbre ese eje.
	if (rotX != 0 || rotY != 0)
	{
		Matrix rotMat = Matrix::SRotationAxis(GetLeft(), rotY*FastMath::DEGREES_TO_RADIANS) *
			Matrix::SRotationAxis(UP_VECTOR, -rotX*FastMath::DEGREES_TO_RADIANS);

		Vector3 dif = m_lookFrom - m_lookAt;

		m_lookFrom = m_lookAt + Vector3::TransformCoordinate(dif, rotMat).XYZ();
	}

	m_viewMatrix.LookAtLH(m_lookAt, m_lookFrom, UP_VECTOR);
}
Exemple #13
0
void cCamera::GetViewDir(cVector3D *vdir)
{
	if(ViewDirChanged) GetViewDir();
	*vdir = ViewDir;
}