From 7fc12cd43dcb21df88be5c47c319d0d3f6498216 Mon Sep 17 00:00:00 2001 From: prep Date: Thu, 28 Jul 2011 16:09:17 -0400 Subject: Fix for sh-2044, sh-2039 and sh-2166 (Avatar weights were sometimes not correctly applied upon import. --- indra/llprimitive/llmodel.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'indra/llprimitive/llmodel.h') diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index 3f58eba07d..9dab3a0400 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -217,13 +217,29 @@ public: } }; + + struct JointPositionalCompare + { + //Are the doubles the same w/in epsilon specified tolerance + bool areEqual( double a, double b ) + { + const float epsilon = 1e-5f; + return (abs(a - b) > epsilon) && (a < b); + } + //Make sure that we return false for any values that are within the tolerance for equivalence + bool operator() ( const LLVector3& a, const LLVector3& b ) + { + return ( areEqual( a[0],b[0]) && areEqual( a[1],b[1] ) && areEqual( a[2],b[2]) ) ? false : true; + } + }; + //copy of position array for this model -- mPosition[idx].mV[X,Y,Z] std::vector mPosition; //map of positions to skin weights --- mSkinWeights[pos].mV[0..4] == . //joint_index corresponds to mJointList typedef std::vector weight_list; - typedef std::map weight_map; + typedef std::map weight_map; weight_map mSkinWeights; //get list of weight influences closest to given position -- cgit v1.2.3 From 0713e8c97a75cb209c5d36fba0bdf20dc107a981 Mon Sep 17 00:00:00 2001 From: nyx Date: Fri, 29 Jul 2011 17:21:27 -0400 Subject: BUILDFIX: fixing build for linux, casting doubles as parameters to abs --- indra/llprimitive/llmodel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llprimitive/llmodel.h') diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index 90c1c252ed..74e5657d28 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -225,7 +225,7 @@ public: bool areEqual( double a, double b ) { const float epsilon = 1e-5f; - return (abs(a - b) > epsilon) && (a < b); + return (abs((int)(a - b)) > epsilon) && (a < b); } //Make sure that we return false for any values that are within the tolerance for equivalence bool operator() ( const LLVector3& a, const LLVector3& b ) -- cgit v1.2.3 From c013c3ab5360f25ad4f9d0c7663c342367105324 Mon Sep 17 00:00:00 2001 From: prep linden Date: Fri, 29 Jul 2011 17:44:42 -0400 Subject: Removed joint Positional Compare because it was crashing on some rigs --- indra/llprimitive/llmodel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/llprimitive/llmodel.h') diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index 9dab3a0400..4f4e642f68 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -224,7 +224,7 @@ public: bool areEqual( double a, double b ) { const float epsilon = 1e-5f; - return (abs(a - b) > epsilon) && (a < b); + return (abs(a - b) < epsilon) && (a < b); } //Make sure that we return false for any values that are within the tolerance for equivalence bool operator() ( const LLVector3& a, const LLVector3& b ) @@ -239,7 +239,7 @@ public: //map of positions to skin weights --- mSkinWeights[pos].mV[0..4] == . //joint_index corresponds to mJointList typedef std::vector weight_list; - typedef std::map weight_map; + typedef std::map weight_map; weight_map mSkinWeights; //get list of weight influences closest to given position -- cgit v1.2.3 From df94d0c778e63ce053cfd1fa4423b180bab6adfb Mon Sep 17 00:00:00 2001 From: prep Date: Wed, 3 Aug 2011 17:01:34 -0400 Subject: Fixes for sh-2039, sh-1336, and sh-2044. Vertices were having incorrect weights assigned. --- indra/llprimitive/llmodel.h | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'indra/llprimitive/llmodel.h') diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index b5dd9bf87d..9a7b9fa271 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -219,20 +219,17 @@ public: }; - struct JointPositionalCompare + //Are the doubles the same w/in epsilon specified tolerance + bool areEqual( double a, double b ) { - //Are the doubles the same w/in epsilon specified tolerance - bool areEqual( double a, double b ) - { - const float epsilon = 1e-5f; - return (abs((int)(a - b)) < epsilon) && (a < b); - } - //Make sure that we return false for any values that are within the tolerance for equivalence - bool operator() ( const LLVector3& a, const LLVector3& b ) - { - return ( areEqual( a[0],b[0]) && areEqual( a[1],b[1] ) && areEqual( a[2],b[2]) ) ? false : true; - } - }; + const float epsilon = 1e-5f; + return (fabs((a - b)) < epsilon) ? true : false ; + } + //Make sure that we return false for any values that are within the tolerance for equivalence + bool jointPositionalLookup( const LLVector3& a, const LLVector3& b ) + { + return ( areEqual( a[0],b[0]) && areEqual( a[1],b[1] ) && areEqual( a[2],b[2]) ) ? true : false; + } //copy of position array for this model -- mPosition[idx].mV[X,Y,Z] std::vector mPosition; -- cgit v1.2.3