summaryrefslogtreecommitdiff
path: root/indra/llmath/llvolume.h
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2010-06-03 12:53:11 -0500
committerDave Parks <davep@lindenlab.com>2010-06-03 12:53:11 -0500
commit64d51dbc4482c12bc1ae56598b924cfe6f0ff0e9 (patch)
tree482cc191426a9332d3b900b7f8136f6a340ddb64 /indra/llmath/llvolume.h
parent8b16faec3096e32b76b227efcb67fd33e7254f40 (diff)
parent26ba00b5554d20ee958693ced87b36fa7f6e3d99 (diff)
merge
Diffstat (limited to 'indra/llmath/llvolume.h')
-rw-r--r--indra/llmath/llvolume.h35
1 files changed, 20 insertions, 15 deletions
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index 7c63266aab..c49d1c650d 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -40,8 +40,13 @@ class LLPathParams;
class LLVolumeParams;
class LLProfile;
class LLPath;
+
+template <class T> class LLOctreeNode;
+
+class LLVector4a;
class LLVolumeFace;
class LLVolume;
+class LLVolumeTriangle;
#include "lldarray.h"
#include "lluuid.h"
@@ -49,15 +54,14 @@ class LLVolume;
//#include "vmath.h"
#include "v2math.h"
#include "v3math.h"
+#include "v3dmath.h"
#include "v4math.h"
-#include "llvector4a.h"
#include "llquaternion.h"
#include "llstrider.h"
#include "v4coloru.h"
#include "llrefcount.h"
#include "llfile.h"
-
//============================================================================
const S32 MIN_DETAIL_FACES = 6;
@@ -830,6 +834,9 @@ public:
LLVolumeFace& operator=(const LLVolumeFace& rhs);
~LLVolumeFace();
+private:
+ void freeData();
+public:
BOOL create(LLVolume* volume, BOOL partial_build = FALSE);
void createBinormals();
@@ -855,26 +862,19 @@ public:
public:
U16 mIndex;
- bool operator==(const LLVolumeFace::VertexData& rhs) const
- {
- return getPosition().equal3(rhs.getPosition()) &&
- mTexCoord == rhs.mTexCoord &&
- getNormal().equal3(rhs.getNormal());
- }
+ bool operator==(const LLVolumeFace::VertexData& rhs) const;
struct ComparePosition
{
- bool operator()(const LLVector4a& a, const LLVector4a& b) const
- {
- return a.less3(b);
- }
+ bool operator()(const LLVector4a& a, const LLVector4a& b) const;
};
typedef std::map<LLVector4a, std::vector<VertexMapData>, VertexMapData::ComparePosition > PointMap;
};
void optimize(F32 angle_cutoff = 2.f);
-
+ void createOctree();
+
enum
{
SINGLE_MASK = 0x0001,
@@ -919,6 +919,8 @@ public:
// mWeights.size() should be empty or match mVertices.size()
LLVector4a* mWeights;
+ LLOctreeNode<LLVolumeTriangle>* mOctree;
+
private:
BOOL createUnCutCubeCap(LLVolume* volume, BOOL partial_build = FALSE);
BOOL createCap(LLVolume* volume, BOOL partial_build = FALSE);
@@ -1082,12 +1084,15 @@ void calc_binormal_from_triangle(
BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* center, const F32* size);
BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size);
+BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, const LLVector4a& center, const LLVector4a& size);
BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir,
- F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided);
+ F32& intersection_a, F32& intersection_b, F32& intersection_t, BOOL two_sided);
BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir,
- F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided);
+ F32& intersection_a, F32& intersection_b, F32& intersection_t);
+BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir,
+ F32& intersection_a, F32& intersection_b, F32& intersection_t);