From 1278470a91de5f7945132bc646d5029e38e6bc28 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 20 May 2014 13:31:08 -0700 Subject: [PATCH] properly handle FSTs that have translations and rotations --- interface/src/renderer/Model.cpp | 17 ++++++++++++----- libraries/fbx/src/FBXReader.cpp | 1 - libraries/fbx/src/FBXReader.h | 2 -- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 90ae9e5e46..a53d0486ec 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -435,8 +435,12 @@ Extents Model::getMeshExtents() const { return Extents(); } const Extents& extents = _geometry->getFBXGeometry().meshExtents; - glm::vec3 scale = _scale * _geometry->getFBXGeometry().fstScaled; - Extents scaledExtents = { extents.minimum * scale, extents.maximum * scale }; + + // even though our caller asked for "unscaled" we need to include any fst scaling, translation, and rotation, which + // is captured in the offset matrix + glm::vec3 minimum = glm::vec3(_geometry->getFBXGeometry().offset * glm::vec4(extents.minimum, 1.0)); + glm::vec3 maximum = glm::vec3(_geometry->getFBXGeometry().offset * glm::vec4(extents.maximum, 1.0)); + Extents scaledExtents = { minimum * _scale, maximum * _scale }; return scaledExtents; } @@ -447,9 +451,12 @@ Extents Model::getUnscaledMeshExtents() const { const Extents& extents = _geometry->getFBXGeometry().meshExtents; - // even though our caller asked for "unscaled" we need to include any fst scaling - float scale = _geometry->getFBXGeometry().fstScaled; - Extents scaledExtents = { extents.minimum * scale, extents.maximum * scale }; + // even though our caller asked for "unscaled" we need to include any fst scaling, translation, and rotation, which + // is captured in the offset matrix + glm::vec3 minimum = glm::vec3(_geometry->getFBXGeometry().offset * glm::vec4(extents.minimum, 1.0)); + glm::vec3 maximum = glm::vec3(_geometry->getFBXGeometry().offset * glm::vec4(extents.maximum, 1.0)); + Extents scaledExtents = { minimum, maximum }; + return scaledExtents; } diff --git a/libraries/fbx/src/FBXReader.cpp b/libraries/fbx/src/FBXReader.cpp index 44ef3f3aab..897c9b6f98 100644 --- a/libraries/fbx/src/FBXReader.cpp +++ b/libraries/fbx/src/FBXReader.cpp @@ -1399,7 +1399,6 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping) // get offset transform from mapping float offsetScale = mapping.value("scale", 1.0f).toFloat(); - geometry.fstScaled = offsetScale; glm::quat offsetRotation = glm::quat(glm::radians(glm::vec3(mapping.value("rx").toFloat(), mapping.value("ry").toFloat(), mapping.value("rz").toFloat()))); geometry.offset = glm::translate(glm::vec3(mapping.value("tx").toFloat(), mapping.value("ty").toFloat(), diff --git a/libraries/fbx/src/FBXReader.h b/libraries/fbx/src/FBXReader.h index 2aabdab6fa..38251e4065 100644 --- a/libraries/fbx/src/FBXReader.h +++ b/libraries/fbx/src/FBXReader.h @@ -211,8 +211,6 @@ public: Extents bindExtents; Extents meshExtents; - float fstScaled; - QVector animationFrames; QVector attachments;