diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2015-03-16 01:54:35 +0400 |
---|---|---|
committer | Konstantin Ritt <ritt.ks@gmail.com> | 2015-03-16 23:00:10 +0000 |
commit | 424d707537f229340dab1ecc7d54db64cff4255f (patch) | |
tree | 923f36d2b8724b75a581c0dda9a45802c26c2d6a | |
parent | 8139a719293d12ca492ccb2b376da818856c189c (diff) |
[Assimp scene loader] Fix loaded camera orientation
There were several bugs in a single place:
- aiCamera::GetCameraMatrix() produces a viewing matrix flipped around Y
- additional QMatrix4x4::lookAt() transformation has been applied
- and moreover, QMatrix4x4::lookAt(.., .., QVector3D(0, 0, 0)) produces
an invalid matrix at all.
Change-Id: Ie2a80810d76df0f0c39c3ae53adfdf52b06aafc1
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/plugins/sceneparsers/assimp/assimpparser.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/plugins/sceneparsers/assimp/assimpparser.cpp b/src/plugins/sceneparsers/assimp/assimpparser.cpp index 5cbdc7b46..79610acee 100644 --- a/src/plugins/sceneparsers/assimp/assimpparser.cpp +++ b/src/plugins/sceneparsers/assimp/assimpparser.cpp @@ -38,6 +38,7 @@ #include <Qt3DCore/qentity.h> #include <Qt3DCore/qtransform.h> +#include <Qt3DCore/qlookattransform.h> #include <Qt3DCore/qmatrixtransform.h> #include <Qt3DCore/qcameralens.h> #include <private/qabstractmesh_p.h> @@ -661,27 +662,22 @@ void AssimpParser::loadCamera(uint cameraIndex) QEntity *camera = new QEntity(); QCameraLens *lens = new QCameraLens(); - aiMatrix4x4 cm; - assimpCamera->GetCameraMatrix(cm); lens->setObjectName(QString::fromUtf8(assimpCamera->mName.data)); lens->setPerspectiveProjection(qRadiansToDegrees(assimpCamera->mHorizontalFOV), qMax(assimpCamera->mAspect, 1.0f), assimpCamera->mClipPlaneNear, assimpCamera->mClipPlaneFar); camera->addComponent(lens); - // View Matrix defines camera position & up vector relative to the associated - // node in the scene. This is computed in AssimpParser::node - // camera->lookAt()->setViewMatrix(); + QTransform *transform = new QTransform(); - QMatrix4x4 viewMatrix = AssimpParser::aiMatrix4x4ToQMatrix4x4(cm); - // CHECK THAT THIS WORKS - qCDebug(AssimpParserLog) << Q_FUNC_INFO << "IF CAMERA NOT BEHAVING CORRECTLY LOOK HERE"; - viewMatrix.lookAt(QVector3D(0, 0, 0), - QVector3D(assimpCamera->mLookAt.x, assimpCamera->mLookAt.y, assimpCamera->mLookAt.z), - QVector3D(0, 0, 0)); - transform->addTransform(new QMatrixTransform(viewMatrix)); + QLookAtTransform *lookAt = new QLookAtTransform(); + lookAt->setPosition(QVector3D(assimpCamera->mPosition.x, assimpCamera->mPosition.y, assimpCamera->mPosition.z)); + lookAt->setViewCenter(QVector3D(assimpCamera->mLookAt.x, assimpCamera->mLookAt.y, assimpCamera->mLookAt.z)); + lookAt->setUpVector(QVector3D(assimpCamera->mUp.x, assimpCamera->mUp.y, assimpCamera->mUp.z)); + transform->addTransform(lookAt); camera->addComponent(transform); + m_scene->m_cameras[cameraNode] = camera; } |