mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 05:09:43 +00:00
Filter out triangles with NaN coordinates
Sorting a vector with such values gives invalid result because comparison with NaN is always false.
This commit is contained in:
parent
b0ef20c303
commit
9069e97dce
1 changed files with 12 additions and 0 deletions
|
@ -20,6 +20,7 @@
|
|||
#include <array>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <cmath>
|
||||
|
||||
namespace DetourNavigator
|
||||
{
|
||||
|
@ -40,6 +41,16 @@ namespace DetourNavigator
|
|||
{
|
||||
return static_cast<float>(cellSize) / (dataSize - 1);
|
||||
}
|
||||
|
||||
bool isNan(const RecastMeshTriangle& triangle)
|
||||
{
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
if (std::isnan(triangle.mVertices[i].x())
|
||||
|| std::isnan(triangle.mVertices[i].y())
|
||||
|| std::isnan(triangle.mVertices[i].z()))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Mesh makeMesh(std::vector<RecastMeshTriangle>&& triangles, const osg::Vec3f& shift)
|
||||
|
@ -264,6 +275,7 @@ namespace DetourNavigator
|
|||
|
||||
std::shared_ptr<RecastMesh> RecastMeshBuilder::create(std::size_t generation, std::size_t revision) &&
|
||||
{
|
||||
mTriangles.erase(std::remove_if(mTriangles.begin(), mTriangles.end(), isNan), mTriangles.end());
|
||||
std::sort(mTriangles.begin(), mTriangles.end());
|
||||
std::sort(mWater.begin(), mWater.end());
|
||||
Mesh mesh = makeMesh(std::move(mTriangles));
|
||||
|
|
Loading…
Reference in a new issue