Tools/MeshExtractor: Fixed the generated mesh for continents.
Fixed a few more issues.
This commit is contained in:
1 parent
586df8d417
commit
1588e27f1e
4 files changed
+31
-18
No files matched your search
@@ -153,9 +153,9 @@ void ContinentBuilder::Build()
|
||||
}
|
||||
else
|
||||
{
|
||||
params.maxPolys = 1 << STATIC_POLY_BITS;
|
||||
params.maxTiles = TileMap->TileTable.size();
|
||||
rcVcopy(params.orig, bmin);
|
||||
params.maxPolys = 32768;
|
||||
params.maxTiles = 4096;
|
||||
rcVcopy(params.orig, Constants::Origin);
|
||||
params.tileHeight = Constants::TileSize;
|
||||
params.tileWidth = Constants::TileSize;
|
||||
fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap);
|
||||
|
||||
@@ -17,7 +17,7 @@ void Geometry::CalculateBoundingBox( float*& min, float*& max )
|
||||
max = new float[3];
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
max[i] = std::numeric_limits<float>::min();
|
||||
max[i] = std::numeric_limits<float>::lowest();
|
||||
min[i] = std::numeric_limits<float>::max();
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ void Geometry::CalculateBoundingBox( float*& min, float*& max )
|
||||
void Geometry::CalculateMinMaxHeight( float& min, float& max )
|
||||
{
|
||||
min = std::numeric_limits<float>::max();
|
||||
max = std::numeric_limits<float>::min();
|
||||
max = std::numeric_limits<float>::lowest();
|
||||
|
||||
for (std::vector<Vector3>::iterator itr = Vertices.begin(); itr != Vertices.end(); ++itr)
|
||||
{
|
||||
|
||||
@@ -378,8 +378,8 @@ int main(int argc, char* argv[])
|
||||
|
||||
if (extractFlags & Constants::EXTRACT_FLAG_TEST)
|
||||
{
|
||||
float start[] = { -44.641f, -34.606f, -1.045f };
|
||||
float end[] = { -66.18f, 20.222f, -1.128f };
|
||||
float start[] = { 16226.200195f, 16257.000000f, 13.202200f };
|
||||
float end[] = { 16245.725586f, 16382.465820f, 47.384956f };
|
||||
|
||||
//
|
||||
float m_spos[3];
|
||||
@@ -408,7 +408,7 @@ int main(int argc, char* argv[])
|
||||
dtPolyRef m_startRef;
|
||||
dtPolyRef m_endRef;
|
||||
|
||||
FILE* mmap = fopen("mmaps/555.mmap", "rb");
|
||||
FILE* mmap = fopen("mmaps/001.mmap", "rb");
|
||||
dtNavMeshParams params;
|
||||
int count = fread(¶ms, sizeof(dtNavMeshParams), 1, mmap);
|
||||
fclose(mmap);
|
||||
@@ -427,7 +427,7 @@ int main(int argc, char* argv[])
|
||||
for (int j = 0; j <= 32; ++j)
|
||||
{
|
||||
char buff[100];
|
||||
sprintf(buff, "mmaps/555%02i%02i.mmtile", i, j);
|
||||
sprintf(buff, "mmaps/001%02i%02i.mmtile", i, j);
|
||||
LoadTile(navMesh, buff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,6 +283,15 @@ uint8* TileBuilder::BuildTiled(dtNavMeshParams& navMeshParams)
|
||||
rcPolyMeshDetail* dmesh = rcAllocPolyMeshDetail();
|
||||
rcBuildPolyMeshDetail(Context, *pmesh, *chf, Config.detailSampleDist, Config.detailSampleMaxError, *dmesh);
|
||||
|
||||
// Set flags according to area types (e.g. Swim for Water)
|
||||
for (int i = 0; i < pmesh->npolys; i++)
|
||||
{
|
||||
if (pmesh->areas[i] == Constants::POLY_AREA_ROAD || pmesh->areas[i] == Constants::POLY_AREA_TERRAIN)
|
||||
pmesh->flags[i] = Constants::POLY_FLAG_WALK;
|
||||
else if (pmesh->areas[i] == Constants::POLY_AREA_WATER)
|
||||
pmesh->flags[i] = Constants::POLY_FLAG_SWIM;
|
||||
}
|
||||
|
||||
dtNavMeshCreateParams params;
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
// PolyMesh data
|
||||
@@ -299,21 +308,25 @@ uint8* TileBuilder::BuildTiled(dtNavMeshParams& navMeshParams)
|
||||
params.detailVertsCount = dmesh->nverts;
|
||||
params.detailTris = dmesh->tris;
|
||||
params.detailTriCount = dmesh->ntris;
|
||||
rcVcopy(params.bmin, pmesh->bmin);
|
||||
rcVcopy(params.bmax, pmesh->bmax);
|
||||
// General settings
|
||||
params.ch = InstanceConfig.ch;
|
||||
params.cs = InstanceConfig.cs;
|
||||
params.walkableClimb = InstanceConfig.walkableClimb * InstanceConfig.ch;
|
||||
params.walkableHeight = InstanceConfig.walkableHeight * InstanceConfig.ch;
|
||||
params.walkableRadius = InstanceConfig.walkableRadius * InstanceConfig.cs;
|
||||
params.ch = Config.ch;
|
||||
params.cs = Config.cs;
|
||||
params.walkableClimb = Config.walkableClimb * Config.ch;
|
||||
params.walkableHeight = Config.walkableHeight * Config.ch;
|
||||
params.walkableRadius = Config.walkableRadius * Config.cs;
|
||||
params.tileX = X;
|
||||
params.tileY = Y;
|
||||
params.tileLayer = 0;
|
||||
params.buildBvTree = true;
|
||||
|
||||
rcVcopy(params.bmax, bmax);
|
||||
rcVcopy(params.bmin, bmin);
|
||||
// Recalculate the bounds with the added geometry
|
||||
float* bmin2 = NULL, *bmax2 = NULL;
|
||||
CalculateTileBounds(bmin2, bmax2, navMeshParams);
|
||||
bmin2[1] = bmin[1];
|
||||
bmax2[1] = bmax[1];
|
||||
|
||||
rcVcopy(params.bmax, bmax2);
|
||||
rcVcopy(params.bmin, bmin2);
|
||||
|
||||
// Offmesh-connection settings
|
||||
params.offMeshConCount = 0; // none for now
|
||||
|
||||
Reference in new issue
Block a user