summaryrefslogtreecommitdiff
path: root/indra/llprimitive/llmodel.cpp
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2013-05-13 18:34:54 -0400
committerMonty Brandenberg <monty@lindenlab.com>2013-05-13 18:34:54 -0400
commit73f474d886d2430db3d5c8f7729f769b389730a4 (patch)
tree5b1f481284a030c72ac08d8b3027ed608bc3ceb6 /indra/llprimitive/llmodel.cpp
parent81ffd3fccac709a5903dd0d7572db50c50850347 (diff)
parent180dd12ed637c1f63a5013d25fbac002e1d94c93 (diff)
Merge. Refresh from /lindenlab/viewer-cat prior to pushing.
Diffstat (limited to 'indra/llprimitive/llmodel.cpp')
-rwxr-xr-x[-rw-r--r--]indra/llprimitive/llmodel.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index ef6eb75a6b..e236f98fe6 100644..100755
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -1122,6 +1122,43 @@ void LLModel::getNormalizedScaleTranslation(LLVector3& scale_out, LLVector3& tra
translation_out = mNormalizedTranslation;
}
+LLVector3 LLModel::getTransformedCenter(const LLMatrix4& mat)
+{
+ LLVector3 ret;
+
+ if (!mVolumeFaces.empty())
+ {
+ LLMatrix4a m;
+ m.loadu(mat);
+
+ LLVector4a minv,maxv;
+
+ LLVector4a t;
+ m.affineTransform(mVolumeFaces[0].mPositions[0], t);
+ minv = maxv = t;
+
+ for (S32 i = 0; i < mVolumeFaces.size(); ++i)
+ {
+ LLVolumeFace& face = mVolumeFaces[i];
+
+ for (U32 j = 0; j < face.mNumVertices; ++j)
+ {
+ m.affineTransform(face.mPositions[j],t);
+ update_min_max(minv, maxv, t);
+ }
+ }
+
+ minv.add(maxv);
+ minv.mul(0.5f);
+
+ ret.set(minv.getF32ptr());
+ }
+
+ return ret;
+}
+
+
+
void LLModel::setNumVolumeFaces(S32 count)
{
mVolumeFaces.resize(count);