summaryrefslogtreecommitdiff
path: root/indra/llprimitive
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2010-12-22 01:05:35 -0600
committerDave Parks <davep@lindenlab.com>2010-12-22 01:05:35 -0600
commite1b1db9575945fa8436b4ebabf55242635b61f38 (patch)
tree998eed633f51cb2ea8142f745d044fe6be900764 /indra/llprimitive
parente9d21ba941a52665d7ad2ee3483c6ac7b7ec6486 (diff)
SH-636 Update physics tab to new spec, move "completed" physics decomp callbacks to main thread, add object model to decomposition tool, make imported model scales non-uniform.
Diffstat (limited to 'indra/llprimitive')
-rwxr-xr-xindra/llprimitive/llmodel.cpp23
-rwxr-xr-xindra/llprimitive/llmodel.h3
2 files changed, 20 insertions, 6 deletions
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index 2a8505e16e..28f152f49c 100755
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -27,6 +27,7 @@
#include "linden_common.h"
#include "llmodel.h"
+#include "llconvexdecomposition.h"
#include "llsdserialize.h"
#include "llvector4a.h"
@@ -57,7 +58,15 @@ const int MODEL_NAMES_LENGTH = sizeof(model_names) / sizeof(std::string);
LLModel::LLModel(LLVolumeParams& params, F32 detail)
: LLVolume(params, detail), mNormalizedScale(1,1,1), mNormalizedTranslation(0,0,0)
{
+ mDecompID = -1;
+}
+LLModel::~LLModel()
+{
+ if (mDecompID >= 0)
+ {
+ LLConvexDecomposition::getInstance()->deleteDecomposition(mDecompID);
+ }
}
void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Array& inputs, U32 min_idx, U32 max_idx)
@@ -941,11 +950,10 @@ void LLModel::normalizeVolumeFaces()
LLVector4a size;
size.setSub(max, min);
- // To make the model fit within
- // the unit cube with only the largest
- // dimensions fitting on the surface of the cube,
- // calculate the largest extent on any axis
- F32 scale = 1.f/llmax(llmax(size[0], size[1]), size[2]);
+ // Compute scale as reciprocal of size
+ LLVector4a scale;
+ scale.splat(1.f);
+ scale.div(size);
for (U32 i = 0; i < mVolumeFaces.size(); ++i)
{
@@ -974,7 +982,10 @@ void LLModel::normalizeVolumeFaces()
// we would need to multiply the model
// by to get the original size of the
// model instead of the normalized size.
- mNormalizedScale = LLVector3(1,1,1) / scale;
+ LLVector4a normalized_scale;
+ normalized_scale.splat(1.f);
+ normalized_scale.div(scale);
+ mNormalizedScale.set(normalized_scale.getF32ptr());
mNormalizedTranslation.set(trans.getF32ptr());
mNormalizedTranslation *= -1.f;
}
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index 9cc734ff59..ebf37904d4 100755
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -56,6 +56,8 @@ public:
typedef std::vector<LLVector3> hull;
LLModel(LLVolumeParams& params, F32 detail);
+ ~LLModel();
+
static LLSD writeModel(
std::string filename,
LLModel* physics,
@@ -193,6 +195,7 @@ public:
LLVector3 mNormalizedTranslation;
// convex hull decomposition
+ S32 mDecompID;
convex_hull_decomposition mConvexHullDecomp;
void setConvexHullDecomposition(
const convex_hull_decomposition& decomp);