2017-02-02 17:01:08 +00:00
|
|
|
#include "..\Header\OrbitCamera.h"
|
|
|
|
#include <QVector2D>
|
|
|
|
#include <qmath.h>
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
// constructor/destructor
|
|
|
|
|
|
|
|
OrbitCamera::OrbitCamera()
|
|
|
|
{
|
|
|
|
resetView();
|
|
|
|
}
|
|
|
|
|
|
|
|
OrbitCamera::~OrbitCamera()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
// functions
|
|
|
|
|
|
|
|
void OrbitCamera::rotateAction(QVector2D diff)
|
|
|
|
{
|
2017-02-03 14:54:45 +00:00
|
|
|
m_phi -= diff.x() * 0.01;
|
2017-02-02 17:01:08 +00:00
|
|
|
m_theta -= diff.y() * 0.01;
|
|
|
|
|
2017-02-03 14:54:45 +00:00
|
|
|
m_theta = qMax(qMin(M_PI - 0.0001, m_theta), 0.0001);
|
2017-02-02 17:01:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void OrbitCamera::moveAction(QVector2D diff)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void OrbitCamera::wheelAction(double value)
|
|
|
|
{
|
|
|
|
m_roh -= m_zSpeed * value / 240;
|
|
|
|
m_roh = qMax(m_roh, 0.0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void OrbitCamera::recalculateMatrix()
|
|
|
|
{
|
|
|
|
m_matrix = QMatrix4x4();
|
|
|
|
|
|
|
|
QVector3D tmpPosition;
|
|
|
|
tmpPosition.setX(qSin(m_theta) * qCos(m_phi));
|
|
|
|
tmpPosition.setY(qSin(m_theta) * qSin(m_phi));
|
|
|
|
tmpPosition.setZ(qCos(m_theta));
|
|
|
|
|
2017-02-03 14:54:45 +00:00
|
|
|
m_matrix.lookAt(m_roh * tmpPosition, QVector3D(0,0,0), QVector3D(0, 0, 1));
|
2017-02-04 14:48:10 +00:00
|
|
|
m_matrix.rotate(90, 1, 0, 0);
|
|
|
|
m_matrix.rotate(90, 0, 1, 0);
|
2017-02-02 17:01:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void OrbitCamera::resetView()
|
|
|
|
{
|
|
|
|
m_roh = 4;
|
2017-02-04 14:48:10 +00:00
|
|
|
m_phi = 0; //-M_PI_2;
|
2017-02-03 14:54:45 +00:00
|
|
|
m_theta = M_PI_2;
|
2017-02-02 17:01:08 +00:00
|
|
|
CameraInterface::resetView();
|
|
|
|
}
|