1
0
Fork 0
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:
elsid 2022-01-23 15:12:27 +01:00
parent b0ef20c303
commit 9069e97dce
No known key found for this signature in database
GPG key ID: B845CB9FEE18AB40

View file

@ -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));