From 26f46401945ca83705f88c022963e9e4cb7dc325 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 5 Sep 2024 19:09:23 +0200 Subject: [PATCH] chore: properly read uv data from gltf --- src/Common/Utils/HalfFloat.cpp | 25 +++++++++++++++++++++-- src/ObjLoading/XModel/Gltf/GltfLoader.cpp | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Common/Utils/HalfFloat.cpp b/src/Common/Utils/HalfFloat.cpp index 663fefa1..58a4bfe2 100644 --- a/src/Common/Utils/HalfFloat.cpp +++ b/src/Common/Utils/HalfFloat.cpp @@ -17,7 +17,28 @@ float HalfFloat::ToFloat(const half_float_t half) return 0.0f; } -half_float_t HalfFloat::ToHalf(float f) +half_float_t HalfFloat::ToHalf(const float f) { - return 0; + half_float_t v3; + int v6; + + union + { + uint32_t u; + float f; + } result{}; + + result.f = f; + + if (static_cast((2 * result.u) ^ 0x80000000) >> 14 < 0x3FFF) + v6 = static_cast((2 * result.u) ^ 0x80000000) >> 14; + else + v6 = 0x3FFF; + + if (v6 > -16384) + v3 = static_cast(v6); + else + v3 = 0xC000; + + return (v3 & 0x3FFFu) | ((result.u >> 16) & 0xC000u); } diff --git a/src/ObjLoading/XModel/Gltf/GltfLoader.cpp b/src/ObjLoading/XModel/Gltf/GltfLoader.cpp index 5ef4508e..ef5face7 100644 --- a/src/ObjLoading/XModel/Gltf/GltfLoader.cpp +++ b/src/ObjLoading/XModel/Gltf/GltfLoader.cpp @@ -270,7 +270,7 @@ namespace float coordinates[3]; float normal[3]; if (!positionAccessor->GetFloatVec3(vertexIndex, coordinates) || !normalAccessor->GetFloatVec3(vertexIndex, normal) - || !colorAccessor->GetFloatVec4(vertexIndex, vertex.color) || !colorAccessor->GetFloatVec2(vertexIndex, vertex.uv) + || !colorAccessor->GetFloatVec4(vertexIndex, vertex.color) || !uvAccessor->GetFloatVec2(vertexIndex, vertex.uv) || !jointsAccessor->GetUnsignedVec4(vertexIndex, joints) || !weightsAccessor->GetFloatVec4(vertexIndex, weights)) { return false;