Commit 11d12d34 authored by hybrid's avatar hybrid

Changed scene node sorting to use squared distances.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1296 dfc29bdd-3216-0410-991c-e03cc46cb475
parent bd4a3aa3
...@@ -494,52 +494,45 @@ namespace scene ...@@ -494,52 +494,45 @@ namespace scene
struct TransparentNodeEntry struct TransparentNodeEntry
{ {
TransparentNodeEntry() {}; TransparentNodeEntry() : node(0), distance(0.f) {};
TransparentNodeEntry(ISceneNode* n, const core::vector3df &camera) TransparentNodeEntry(ISceneNode* n, const core::vector3df &camera)
: node(n)
{ {
node = n; distance = (f32)(node->getAbsoluteTransformation().getTranslation().getDistanceFromSQ(camera));
// TODO: this could be optimized, by not using sqrt
distance = (f32)(node->getAbsoluteTransformation().getTranslation().getDistanceFrom(camera));
} }
ISceneNode* node;
f32 distance;
bool operator < (const TransparentNodeEntry& other) const bool operator < (const TransparentNodeEntry& other) const
{ {
return (distance > other.distance); return (distance > other.distance);
} }
ISceneNode* node;
f32 distance;
}; };
//! sort on distance (sphere) to camera //! sort on distance (sphere) to camera
struct DistanceNodeEntry struct DistanceNodeEntry
{ {
DistanceNodeEntry() {}; DistanceNodeEntry() : node(0), distance(0.) {}
DistanceNodeEntry(ISceneNode* n, f64 d) DistanceNodeEntry(ISceneNode* n, f64 d)
{ : node(n), distance(d) {}
node = n;
distance = d;
}
DistanceNodeEntry(ISceneNode* n, const core::vector3df &cameraPos) DistanceNodeEntry(ISceneNode* n, const core::vector3df &cameraPos)
: node(n)
{ {
node = n; distance = node->getAbsoluteTransformation().getTranslation().getDistanceFromSQ(cameraPos);
distance -= node->getBoundingBox().getExtent().getLengthSQ() * 0.5;
distance = (node->getAbsoluteTransformation().getTranslation().getDistanceFromSQ(cameraPos));
distance -= node->getBoundingBox().getExtent().getLengthSQ() / 2.0;
} }
ISceneNode* node;
f64 distance;
bool operator < (const DistanceNodeEntry& other) const bool operator < (const DistanceNodeEntry& other) const
{ {
return distance < other.distance; return distance < other.distance;
} }
ISceneNode* node;
f64 distance;
}; };
//! video driver //! video driver
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment