added limited rotation,
2 directions do not work
This commit is contained in:
@@ -66,8 +66,39 @@ void OglViewerWidget::mouseMoveEvent(QMouseEvent *e)
|
||||
m_mouse.position = QVector2D(e->localPos());
|
||||
|
||||
// calculate the rotation axis and rotate
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(diff.y(), diff.x(), 0.0).normalized(), diff.length() * 0.5) * m_rotation;
|
||||
if (m_rotDirections.x && m_rotDirections.y && m_rotDirections.z)
|
||||
{
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(diff.y(), diff.x(), 0.0).normalized(), diff.length() * 0.5) * m_rotation;
|
||||
}
|
||||
else if (m_rotDirections.x && m_rotDirections.y && !m_rotDirections.z)
|
||||
{
|
||||
//float pitch, yaw, roll;
|
||||
//m_rotation.getEulerAngles(&pitch, &yaw, &roll);
|
||||
//pitch += diff.y() * 0.5;
|
||||
//yaw += diff.x() * 0.5;
|
||||
|
||||
//std::cout << pitch << " - " << yaw << std::endl;
|
||||
|
||||
//m_rotation = QQuaternion::fromEulerAngles(pitch, yaw, roll);
|
||||
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(0.0, 1.0, 0.0).normalized(), diff.x() * 0.5) + m_rotation;
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(1.0, 0.0, 0.0).normalized(), diff.y() * 0.5) + m_rotation;
|
||||
|
||||
}
|
||||
else if (m_rotDirections.x && !m_rotDirections.y && !m_rotDirections.z)
|
||||
{
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(0.0, 1.0, 0.0).normalized(), diff.x() * 0.5) * m_rotation;
|
||||
}
|
||||
else if (!m_rotDirections.x && m_rotDirections.y && !m_rotDirections.z)
|
||||
{
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(1.0, 0.0, 0.0).normalized(), diff.y() * 0.5) * m_rotation;
|
||||
}
|
||||
else if (!m_rotDirections.x && !m_rotDirections.y && m_rotDirections.z)
|
||||
{
|
||||
m_rotation = QQuaternion::fromAxisAndAngle(QVector3D(0.0, 0.0, 1.0).normalized(), diff.x() * 0.5) * m_rotation;
|
||||
}
|
||||
|
||||
|
||||
// request an update
|
||||
update();
|
||||
}
|
||||
@@ -218,5 +249,16 @@ void OglViewerWidget::resetView()
|
||||
|
||||
void OglViewerWidget::changeDirection(int direction)
|
||||
{
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case 1:
|
||||
m_rotDirections.x = !m_rotDirections.x;
|
||||
break;
|
||||
case 2:
|
||||
m_rotDirections.y = !m_rotDirections.y;
|
||||
break;
|
||||
case 3:
|
||||
m_rotDirections.z = !m_rotDirections.z;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user