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); }
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; }
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); }