From 8cf2b1d0efe66ada483c8e6e0a574f677b109000 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sun, 12 May 2024 17:51:21 +0100 Subject: [PATCH] Update tsMeshFit.cpp fix addSphere fix addCapsule now spheres and capsules scale correctly.... hopefully.... --- Engine/source/ts/tsMeshFit.cpp | 49 +++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/Engine/source/ts/tsMeshFit.cpp b/Engine/source/ts/tsMeshFit.cpp index 3f2ef8a23..6c6b4ced2 100644 --- a/Engine/source/ts/tsMeshFit.cpp +++ b/Engine/source/ts/tsMeshFit.cpp @@ -443,12 +443,27 @@ void MeshFit::addSphere( F32 radius, const Point3F& center ) if ( !mesh ) return; - for ( S32 i = 0; i < mesh->mVertexData.size(); i++ ) + if (mesh->mVerts.size() > 0) { - TSMesh::__TSMeshVertexBase &vdata = mesh->mVertexData.getBase(i); - Point3F v = vdata.vert(); - vdata.vert( v * radius ); + for (S32 i = 0; i < mesh->mVerts.size(); i++) + { + Point3F v = mesh->mVerts[i]; + mesh->mVerts[i] = v * radius; + } + + mesh->mVertexData.setReady(false); } + else + { + for (S32 i = 0; i < mesh->mVertexData.size(); i++) + { + TSMesh::__TSMeshVertexBase& vdata = mesh->mVertexData.getBase(i); + Point3F v = vdata.vert(); + vdata.vert(v * radius); + } + } + + mesh->computeBounds(); mMeshes.increment(); @@ -477,12 +492,28 @@ void MeshFit::addCapsule( F32 radius, F32 height, const MatrixF& mat ) // Translate and scale the mesh verts height = mMax( 0, height ); F32 offset = ( height / ( 2 * radius ) ) - 0.5f; - for ( S32 i = 0; i < mesh->mVertexData.size(); i++ ) + if (mesh->mVerts.size() > 0) { - Point3F v = mesh->mVertexData.getBase(i).vert(); - v.y += ( ( v.y > 0 ) ? offset : -offset ); - mesh->mVertexData.getBase(i).vert( v * radius ); + for (S32 i = 0; i < mesh->mVerts.size(); i++) + { + Point3F v = mesh->mVerts[i]; + v.y += ((v.y > 0) ? offset : -offset); + mesh->mVerts[i] = v * radius; + } + + mesh->mVertexData.setReady(false); } + else + { + for (S32 i = 0; i < mesh->mVertexData.size(); i++) + { + TSMesh::__TSMeshVertexBase& vdata = mesh->mVertexData.getBase(i); + Point3F v = vdata.vert(); + v.y += ((v.y > 0) ? offset : -offset); + vdata.vert(v * radius); + } + } + mesh->computeBounds(); mMeshes.increment(); @@ -722,7 +753,7 @@ void MeshFit::fitConvexHulls( U32 depth, F32 mergeThreshold, F32 concavityThresh if ( sphereMaxError > 0 ) { primFitter.fitSphere(ch.m_points.size(), points); - sphereError = 100.0f * ( 1.0f - ( meshVolume / primFitter.getSphereVolume() ) ); + sphereError = 100.0f * ( 1.0f - ( meshVolume / primFitter.getSphereVolume())); } if ( capsuleMaxError > 0 ) {