From 8a4955d75bee591d3d4ed4689a36ea525226f2f1 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 30 May 2014 11:13:37 -0700 Subject: [PATCH] temporarily disable the model aligned box picking --- libraries/models/src/ModelTreeElement.cpp | 37 +++++++++++++++-------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/libraries/models/src/ModelTreeElement.cpp b/libraries/models/src/ModelTreeElement.cpp index c655a45b57..e5116e316c 100644 --- a/libraries/models/src/ModelTreeElement.cpp +++ b/libraries/models/src/ModelTreeElement.cpp @@ -192,21 +192,34 @@ bool ModelTreeElement::findDetailedRayIntersection(const glm::vec3& origin, cons // if it's in our AABOX for our rotated extents, then check to see if it's in our non-AABox if (rotatedExtentsBox.findRayIntersection(origin, direction, localDistance, localFace)) { + + // This is experimental code that doesn't quite work, so I'm disabling it by default, but + // leaving it in because I need to work on it and fix it to work properly. + bool pickAgainstModelAlignedBox = false; + + if (pickAgainstModelAlignedBox) { + // extents is the model relative, scaled, centered extents of the model + glm::mat4 rotation = glm::mat4_cast(model.getModelRotation()); + glm::mat4 translation = glm::translate(model.getPosition()); + glm::mat4 modelToWorldMatrix = translation * rotation; + glm::mat4 worldToModelMatrix = glm::inverse(modelToWorldMatrix); - // extents is the model relative, scaled, centered extents of the model - glm::mat4 rotation = glm::mat4_cast(model.getModelRotation()); - glm::mat4 translation = glm::translate(model.getPosition()); - glm::mat4 modelToWorldMatrix = translation * rotation; - glm::mat4 worldToModelMatrix = glm::inverse(modelToWorldMatrix); + AABox modelFrameBox(extents.minimum, (extents.maximum - extents.minimum)); - AABox modelFrameBox(extents.minimum, (extents.maximum - extents.minimum)); + glm::vec3 modelFrameOrigin = glm::vec3(worldToModelMatrix * glm::vec4(origin, 1.0f)); + glm::vec3 modelFrameDirection = glm::vec3(worldToModelMatrix * glm::vec4(direction, 1.0f)); - glm::vec3 modelFrameOrigin = glm::vec3(worldToModelMatrix * glm::vec4(origin, 1.0f)); - glm::vec3 modelFrameDirection = glm::vec3(worldToModelMatrix * glm::vec4(direction, 1.0f)); - - // we can use the AABox's ray intersection by mapping our origin and direction into the model frame - // and testing intersection there. - if (modelFrameBox.findRayIntersection(modelFrameOrigin, modelFrameDirection, localDistance, localFace)) { + // we can use the AABox's ray intersection by mapping our origin and direction into the model frame + // and testing intersection there. + if (modelFrameBox.findRayIntersection(modelFrameOrigin, modelFrameDirection, localDistance, localFace)) { + if (localDistance < distance) { + distance = localDistance; + face = localFace; + *intersectedObject = (void*)(&model); + somethingIntersected = true; + } + } + } else { if (localDistance < distance) { distance = localDistance; face = localFace;