From b56867be55d0f677bcc652b166a15c064ed7808f Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Mon, 26 Jan 2026 12:12:23 -0600 Subject: [PATCH 1/2] clean up straight downward facing convexshape normals --- Engine/source/T3D/convexShape.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Engine/source/T3D/convexShape.cpp b/Engine/source/T3D/convexShape.cpp index 7e3759ce7..de992b9a1 100644 --- a/Engine/source/T3D/convexShape.cpp +++ b/Engine/source/T3D/convexShape.cpp @@ -1436,15 +1436,13 @@ void ConvexShape::_updateGeometry( bool updateCollision ) const Vector< U32 > &facePntMap = face.points; const Vector< ConvexShape::Triangle > &triangles = face.triangles; - const Point3F binormal = mCross(face.normal, face.tangent); - for (S32 j = 0; j < triangles.size(); j++) { for (S32 k = 0; k < 3; k++) { pVert->normal = face.normal; pVert->T = face.tangent; - pVert->B = mCross(face.normal,face.tangent); + pVert->B = mCross(face.normal, face.tangent); pVert->point = pointList[facePntMap[triangles[j][k]]]; pVert->texCoord = face.texcoords[triangles[j][k]]; pVert->texCoord2 = pVert->texCoord; @@ -1966,10 +1964,12 @@ void ConvexShape::Geometry::generate(const Vector< PlaneF > &planes, const Vecto U32 *vertMap = new U32[pntCount]; + Point3F binormal = mCross(newFace.normal, newFace.tangent); + MatrixF quadMat( true ); quadMat.setPosition( averagePnt ); quadMat.setColumn( 0, newFace.tangent ); - quadMat.setColumn( 1, mCross( newFace.normal, newFace.tangent ) ); + quadMat.setColumn( 1, binormal); quadMat.setColumn( 2, newFace.normal ); quadMat.inverse(); @@ -2055,8 +2055,8 @@ void ConvexShape::Geometry::generate(const Vector< PlaneF > &planes, const Vecto // Calculate texture coordinates for each point in this face. + if (newFace.normal.z < -0.9f) binormal = -binormal; - const Point3F binormal = mCross( newFace.normal, newFace.tangent ); PlaneF planey( newFace.centroid - 0.5f * binormal, binormal ); PlaneF planex( newFace.centroid - 0.5f * newFace.tangent, newFace.tangent ); From afb3ed0f27fd9630265bdd6f248fd25ad27ee5a4 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Mon, 26 Jan 2026 12:45:57 -0600 Subject: [PATCH 2/2] more straightforward (and corrected) texcoord assignment --- Engine/source/T3D/convexShape.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/convexShape.cpp b/Engine/source/T3D/convexShape.cpp index de992b9a1..1034c474f 100644 --- a/Engine/source/T3D/convexShape.cpp +++ b/Engine/source/T3D/convexShape.cpp @@ -2064,7 +2064,7 @@ void ConvexShape::Geometry::generate(const Vector< PlaneF > &planes, const Vecto for ( S32 j = 0; j < newFace.points.size(); j++ ) { - F32 x = planex.distToPlane( points[ newFace.points[ j ] ] ); + F32 x = -planex.distToPlane( points[ newFace.points[ j ] ] ); F32 y = planey.distToPlane( points[ newFace.points[ j ] ] ); if (!texOffset.empty()) @@ -2086,7 +2086,7 @@ void ConvexShape::Geometry::generate(const Vector< PlaneF > &planes, const Vecto if (vertFlip.size() > 0 && vertFlip[i]) y *= -1; - newFace.texcoords[j].set(-x, -y); + newFace.texcoords[j].set(x, y); } // Data verification tests.