From b3af14f65acf2e6ff3465d5bdd6ea7193ed43ea9 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 4 Jan 2020 12:15:54 +0100 Subject: [PATCH] Utility/OBJLoader: Fix OBJ uvs --- ChangeLog.md | 1 + examples/FirstScene/main.cpp | 4 ---- src/Nazara/Utility/Formats/OBJLoader.cpp | 2 ++ 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 8c74a6428..db55478ac 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -214,6 +214,7 @@ Nazara Engine: - ⚠ ENetHost::GetTotalReceivedPackets now returns the number of commands received (instead of the number of UDP packets received) - Added EmptyStream class, useful to measure how many bytes some writing operations will take - SegmentCollider2D: Add support for neighbors (aka "ghost vertices"), allowing to prevent seams collisions +- ⚠ OBJLoader flips UV by default, fixing a lot of models UV Nazara Development Kit: - Added ImageWidget (#139) diff --git a/examples/FirstScene/main.cpp b/examples/FirstScene/main.cpp index 0e3f8f8a2..06e9fd97c 100644 --- a/examples/FirstScene/main.cpp +++ b/examples/FirstScene/main.cpp @@ -92,10 +92,6 @@ int main() // Ce paramètre sert à indiquer la mise à l'échelle désirée lors du chargement du modèle. params.mesh.matrix.MakeScale(Nz::Vector3f(0.01f)); // Un centième de la taille originelle - // Les UVs de ce fichier sont retournées (repère OpenGL, origine coin bas-gauche) par rapport à ce que le moteur attend (haut-gauche) - // Nous devons donc indiquer au moteur de les retourner lors du chargement - params.mesh.texCoordScale.Set(1.f, -1.f); - // Nazara va par défaut optimiser les modèles pour un rendu plus rapide, cela peut prendre du temps et n'est pas nécessaire ici params.mesh.optimizeIndexBuffers = false; diff --git a/src/Nazara/Utility/Formats/OBJLoader.cpp b/src/Nazara/Utility/Formats/OBJLoader.cpp index b8ff362f1..58b2d8e0a 100644 --- a/src/Nazara/Utility/Formats/OBJLoader.cpp +++ b/src/Nazara/Utility/Formats/OBJLoader.cpp @@ -306,6 +306,8 @@ namespace Nz if (vertexIndices.texCoord > 0) { Vector2f uv = Vector2f(texCoords[vertexIndices.texCoord - 1]); + uv.y = 1.f - uv.y; //< OBJ model texcoords seems to majority start from bottom left + uvPtr[index] = Vector2f(parameters.texCoordOffset + uv * parameters.texCoordScale); } else