diff --git a/code/Common/SpatialSort.cpp b/code/Common/SpatialSort.cpp index 3ef9f055b..a8afbfaf6 100644 --- a/code/Common/SpatialSort.cpp +++ b/code/Common/SpatialSort.cpp @@ -89,6 +89,9 @@ void SpatialSort::Fill(const aiVector3D *pPositions, unsigned int pNumPositions, // ------------------------------------------------------------------------------------------------ void SpatialSort::Finalize() { + for (unsigned int i = 0; i < mPositions.size(); i++) { + mPositions[i].mDistance = mPositions[i].mPosition * mPlaneNormal; + } std::sort(mPositions.begin(), mPositions.end()); mFinalized = true; } @@ -104,10 +107,7 @@ void SpatialSort::Append(const aiVector3D *pPositions, unsigned int pNumPosition for (unsigned int a = 0; a < pNumPositions; a++) { const char *tempPointer = reinterpret_cast(pPositions); const aiVector3D *vec = reinterpret_cast(tempPointer + a * pElementOffset); - - // store position by index and distance - ai_real distance = *vec * mPlaneNormal; - mPositions.push_back(Entry(static_cast(a + initial), *vec, distance)); + mPositions.push_back(Entry(static_cast(a + initial), *vec)); } if (pFinalize) { diff --git a/include/assimp/SpatialSort.h b/include/assimp/SpatialSort.h index 5db23c86b..475a11d7c 100644 --- a/include/assimp/SpatialSort.h +++ b/include/assimp/SpatialSort.h @@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include namespace Assimp { @@ -150,16 +151,17 @@ protected: struct Entry { unsigned int mIndex; ///< The vertex referred by this entry aiVector3D mPosition; ///< Position - ai_real mDistance; ///< Distance of this vertex to the sorting plane + /// Distance of this vertex to the sorting plane. This is set by Finalize. + ai_real mDistance; Entry() AI_NO_EXCEPT - : mIndex(999999999), + : mIndex(std::numeric_limits::max()), mPosition(), - mDistance(99999.) { + mDistance(std::numeric_limits::max()) { // empty } - Entry(unsigned int pIndex, const aiVector3D &pPosition, ai_real pDistance) : - mIndex(pIndex), mPosition(pPosition), mDistance(pDistance) { + Entry(unsigned int pIndex, const aiVector3D &pPosition) : + mIndex(pIndex), mPosition(pPosition) { // empty }