From f747033aace8f712665e3a6b2de6a58a6662cc0a Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sun, 31 Dec 2023 10:31:51 -0500 Subject: [PATCH] Fix bitangents being slightly off when importing --- parts/mdl/mdlimport.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/parts/mdl/mdlimport.cpp b/parts/mdl/mdlimport.cpp index f8b41dd..358e402 100644 --- a/parts/mdl/mdlimport.cpp +++ b/parts/mdl/mdlimport.cpp @@ -144,14 +144,14 @@ void importModel(physis_MDL &existingModel, const QString &filename) // calculate binormal, because glTF won't give us those!! const glm::vec3 normal = glm::vec3(vertex.normal[0], vertex.normal[1], vertex.normal[2]); const glm::vec4 tangent = *tangent1Data; - const glm::vec3 bitangent = glm::cross(normal, glm::vec3(tangent)) * tangent.w; + const glm::vec3 bitangent = glm::normalize(glm::cross(normal, glm::vec3(tangent)) * tangent.w); const float handedness = glm::dot(glm::cross(glm::vec3(tangent), bitangent), normal) > 0 ? 1 : -1; // In a cruel twist of fate, Tangent1 is actually the **BINORMAL** and not the tangent data. Square Enix is AMAZING. - vertex.bitangent[0] = bitangent.x; - vertex.bitangent[1] = bitangent.y; - vertex.bitangent[2] = bitangent.z; + vertex.bitangent[0] = bitangent.x * handedness; + vertex.bitangent[1] = bitangent.y * handedness; + vertex.bitangent[2] = bitangent.z * handedness; vertex.bitangent[3] = handedness; if (colorAccessor.componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT) {