From c03f79bc35d11b831a3282cd8e9978f636f7d3dd Mon Sep 17 00:00:00 2001 From: Lorenz Esch Date: Mon, 23 Nov 2020 23:25:29 -0500 Subject: [PATCH] FIX: Fix speed of model rotation --- .../model/3dhelpers/renderable3Dentity.cpp | 4 +-- libraries/disp3D/engine/view/view3D.cpp | 30 +++++++++++-------- libraries/disp3D/engine/view/view3D.h | 3 +- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/libraries/disp3D/engine/model/3dhelpers/renderable3Dentity.cpp b/libraries/disp3D/engine/model/3dhelpers/renderable3Dentity.cpp index 9af1e5d4ee6..4bbf11ce34e 100644 --- a/libraries/disp3D/engine/model/3dhelpers/renderable3Dentity.cpp +++ b/libraries/disp3D/engine/model/3dhelpers/renderable3Dentity.cpp @@ -318,7 +318,7 @@ void Renderable3DEntity::setRotY(float rotY) return; } - // Revert X rotation translation because we are in the set (not apply) function + // Revert Y rotation translation because we are in the set (not apply) function QMatrix4x4 m = m_pTransform->matrix(); m.rotate(-m_fRotY + rotY, QVector3D(0.0f, 1.0f, 0.0f)); m_pTransform->setMatrix(m); @@ -351,7 +351,7 @@ void Renderable3DEntity::setRotZ(float rotZ) return; } - // Revert X rotation translation because we are in the set (not apply) function + // Revert Z rotation translation because we are in the set (not apply) function QMatrix4x4 m = m_pTransform->matrix(); m.rotate(-m_fRotZ + rotZ, QVector3D(0.0f, 0.0f, 1.0f)); m_pTransform->setMatrix(m); diff --git a/libraries/disp3D/engine/view/view3D.cpp b/libraries/disp3D/engine/view/view3D.cpp index 828d5cd7e59..af6c665042c 100644 --- a/libraries/disp3D/engine/view/view3D.cpp +++ b/libraries/disp3D/engine/view/view3D.cpp @@ -362,13 +362,14 @@ void View3D::startModelRotationRecursive(QObject* pObject) { //TODO this won't work with QEntities if(Renderable3DEntity* pItem = dynamic_cast(pObject)) { - QPropertyAnimation *anim = new QPropertyAnimation(pItem, QByteArrayLiteral("rotZ")); - anim->setDuration(30000); - anim->setStartValue(QVariant::fromValue(pItem->rotZ())); - anim->setEndValue(QVariant::fromValue(pItem->rotZ() + 360.0f)); - anim->setLoopCount(-1); - anim->start(); - m_lPropertyAnimations << anim; + if(!dynamic_cast(pItem->parent())) { + QPropertyAnimation *anim = new QPropertyAnimation(pItem, QByteArrayLiteral("rotZ")); + anim->setDuration(30000); + anim->setStartValue(QVariant::fromValue(pItem->rotZ())); + anim->setEndValue(QVariant::fromValue(pItem->rotZ() + 360.0f)); + anim->setLoopCount(-1); + m_pParallelAnimationGroup->addAnimation(anim); + } } for(int i = 0; i < pObject->children().size(); ++i) { @@ -378,7 +379,8 @@ void View3D::startModelRotationRecursive(QObject* pObject) //============================================================================================================= -void View3D::setCameraRotation(float fAngle) { +void View3D::setCameraRotation(float fAngle) +{ m_pCamera->setPosition(QVector3D(0.0f, -0.4f, -0.25f)); m_pCamera->setViewCenter(QVector3D(0.0f, 0.0f, 0.0f)); m_pCamera->setUpVector(QVector3D(0.0f, 1.0f, 0.0f)); @@ -398,17 +400,21 @@ void View3D::setCameraRotation(float fAngle) { void View3D::startStopModelRotation(bool checked) { + if(!m_pParallelAnimationGroup) { + m_pParallelAnimationGroup = QSharedPointer::create(); + } + if(checked) { //Start animation - m_lPropertyAnimations.clear(); + m_pParallelAnimationGroup->clear(); for(int i = 0; i < m_p3DObjectsEntity->children().size(); ++i) { startModelRotationRecursive(m_p3DObjectsEntity->children().at(i)); } + + m_pParallelAnimationGroup->start(); } else { - for(int i = 0; i < m_lPropertyAnimations.size(); ++i) { - m_lPropertyAnimations.at(i)->stop(); - } + m_pParallelAnimationGroup->stop(); } } diff --git a/libraries/disp3D/engine/view/view3D.h b/libraries/disp3D/engine/view/view3D.h index d2ac4d5b875..5791088d9f3 100644 --- a/libraries/disp3D/engine/view/view3D.h +++ b/libraries/disp3D/engine/view/view3D.h @@ -241,7 +241,8 @@ class DISP3DSHARED_EXPORT View3D : public Qt3DExtras::Qt3DWindow QPointer m_pScreenCaptureReply; /**< The capture reply object to save screenshots. */ QPointer m_pPicker; /**< The Picker entity. */ - QList > m_lPropertyAnimations; /**< The animations for each 3D object. */ + QSharedPointer m_pParallelAnimationGroup; /**< The animations for each 3D object. */ + QList > m_lLightSources; /**< The light sources. */ signals: