예제 #1
0
void CTouchFreeCamera::Update(float dt)
{
	if(m_isDragging)
	{
		float deltaX = m_dragPosition.x - m_mousePosition.x;
		float deltaY = m_dragPosition.y - m_mousePosition.y;
		m_cameraHAngle = m_dragHAngle + deltaX * 0.015f;
		m_cameraVAngle = m_dragVAngle + deltaY * 0.015f;
		m_cameraVAngle = std::min<float>(m_cameraVAngle, M_PI / 2);
		m_cameraVAngle = std::max<float>(m_cameraVAngle, -M_PI / 2);
	}

	CMatrix4 yawMatrix(CMatrix4::MakeAxisYRotation(m_cameraHAngle));
	CMatrix4 pitchMatrix(CMatrix4::MakeAxisXRotation(m_cameraVAngle));
	CMatrix4 rotationMatrix = yawMatrix * pitchMatrix;

	if(m_isStrafingLeft || m_isStrafingRight)
	{
		CVector3 rightVector = CVector3(1, 0, 0) * rotationMatrix;
		float direction = m_isStrafingLeft ? (-1.0f) : (1.0f);
		m_cameraPosition += (rightVector * direction * MOVE_SPEED * dt);
	}
	if(m_isMovingForward || m_isMovingBackward)
	{
		CVector3 forwardVector = CVector3(0, 0, 1) * rotationMatrix;
		float direction = m_isMovingForward ? (-1.0f) : (1.0f);
		m_cameraPosition += (forwardVector * direction * MOVE_SPEED * dt);
	}

	CMatrix4 translationMatrix(CMatrix4::MakeTranslation(-m_cameraPosition.x, -m_cameraPosition.y, -m_cameraPosition.z));
	CMatrix4 totalMatrix = translationMatrix * rotationMatrix;

	SetViewMatrix(totalMatrix);
}
예제 #2
0
void CActorViewer::Update(float dt)
{
	{
		if(m_commandMode == COMMAND_MODE_DRAG_CAMERA)
		{
			float deltaX = m_dragPosition.x - m_mousePosition.x;
			float deltaY = m_dragPosition.y - m_mousePosition.y;
			m_cameraHAngle = m_dragHAngle + deltaX * 0.015f;
			m_cameraVAngle = m_dragVAngle + deltaY * 0.015f;
			m_cameraVAngle = std::min<float>(m_cameraVAngle, M_PI / 2);
			m_cameraVAngle = std::max<float>(m_cameraVAngle, -M_PI / 2);
		}

		CMatrix4 yawMatrix(CMatrix4::MakeAxisYRotation(m_cameraHAngle));
		CMatrix4 pitchMatrix(CMatrix4::MakeAxisXRotation(m_cameraVAngle));

		CMatrix4 rotationMatrix = yawMatrix * pitchMatrix;
		if(m_actorRotationNode)
		{
			m_actorRotationNode->SetRotation(rotationMatrix);
		}
	}
	m_mainViewport->GetSceneRoot()->Update(dt);
	m_mainViewport->GetSceneRoot()->UpdateTransformations();

	if(m_debugOverlay)
	{
		m_debugOverlay->Update(dt);
	}

	m_elapsed += dt;

}
예제 #3
0
void dPluginCamera::SetMatrix (dFloat yaw, dFloat roll, dFloat distance)
{
//	dMatrix yawMatrix_ (dYawMatrix(yaw));
//	dMatrix rollMatrix_ (dRollMatrix(roll));
//	m_matrix = rollMatrix_ * yawMatrix_;
//	m_matrix.m_posit = dVector (-10.0f, 5.0f, 10.0f, 1.0f);

	m_cameraRoll = dClamp(roll, -85.0f * 3.141692f / 180.0f, 85.0f * 3.141692f / 180.0f);
	m_cameraYaw = dMod (yaw, 2.0f * 3.141592f);
	m_distance = (distance < 0.5f) ? 0.5f : distance;

	dMatrix yawMatrix (dYawMatrix(m_cameraYaw));
	dMatrix rollMatrix (dRollMatrix(m_cameraRoll));
	m_matrix = rollMatrix * yawMatrix;
	m_matrix.m_posit = m_matrix.RotateVector(dVector (-distance, 0.0f, 0.0f, 1.0f)) + m_pointOfInterest;
	m_matrix.m_posit.m_w = 1.0f;
}
void Object::rotateInAxisY(GLfloat yawAngle)
{
    mat4 yawMatrix(1.0f);
    vec3 origin_aux = origin;
    
    translate(-origin_aux);

    yawMatrix = rotate(yawMatrix, yawAngle, axisY);
    
    axisX = vec3(yawMatrix * vec4(axisX, 1.0f));
    axisY = vec3(yawMatrix * vec4(axisY, 1.0f));
    axisZ = vec3(yawMatrix * vec4(axisZ, 1.0f));

    transformations = yawMatrix * transformations;

    translate(origin_aux);
}