#include "..\Header\MoveCamera.h" #include #include ///////////////////////////////////////////////////////////////////////// // constructor/destructor MoveCamera::MoveCamera() { resetView(); } MoveCamera::~MoveCamera() { } ///////////////////////////////////////////////////////////////////////// // functions void MoveCamera::rotateAction(QVector2D diff) { m_phi -= diff.x() * 0.01; m_theta += diff.y() * 0.01; m_theta = qMax(qMin(M_PI - 0.0001, m_theta), 0.0001); } void MoveCamera::moveAction(QVector2D diff) { if (diff.y() > 0) m_sidewardSpeed = 1; else if (diff.y() < 0) m_sidewardSpeed = -1; else m_sidewardSpeed = 0; } void MoveCamera::wheelAction(double value) { if (value > 0) m_forwardSpeed = 1; else if (value < 0) m_forwardSpeed = -1; else m_forwardSpeed = 0; } void MoveCamera::recalculateMatrix() { m_matrix = QMatrix4x4(); // different coordinate (spherical -> world) X->Z | Y->X | Z->Y QVector3D tmpdirection( qSin(m_theta) * qSin(m_phi), qCos(m_theta), qSin(m_theta) * qCos(m_phi) ); QVector3D tmpRight( qSin(m_phi - M_PI_2), 0, qCos(m_phi - M_PI_2) ); m_position += m_forwardSpeed * m_zSpeed * 0.1 * tmpdirection; m_position += m_sidewardSpeed * m_zSpeed * 0.1 * tmpRight; m_matrix.lookAt(m_position, m_position + tmpdirection, QVector3D::crossProduct(tmpRight, tmpdirection)); } void MoveCamera::resetView() { m_position = { 0,0,4 }; m_phi = M_PI; m_theta = M_PI_2; m_forwardSpeed = 0; m_sidewardSpeed = 0; CameraInterface::resetView(); }