This commit is contained in:
aozhiwei 2020-08-14 14:49:19 +08:00
parent 72b2c19a55
commit f53ce64d02
3 changed files with 17 additions and 28 deletions

View File

@ -97,11 +97,12 @@ void NavMeshBuilder::BuildTiles(BuilderParams& builder_params)
rcVcopy(cfg.bmin, builder_params.gemo->GetMeshBoundsMin()); rcVcopy(cfg.bmin, builder_params.gemo->GetMeshBoundsMin());
rcVcopy(cfg.bmax, builder_params.gemo->GetMeshBoundsMax()); rcVcopy(cfg.bmax, builder_params.gemo->GetMeshBoundsMax());
} }
for (int y = 0; y < builder_params.tile_height; ++y) { for (int y = 0; y < builder_params.tile_height; ++y) {
for (int x = 0; x < builder_params.tile_width; ++x) { for (int x = 0; x < builder_params.tile_width; ++x) {
TileCacheData tiles[MAX_LAYERS]; TileCacheData tiles[MAX_LAYERS];
memset(tiles, 0, sizeof(tiles)); memset(tiles, 0, sizeof(tiles));
int ntiles = RasterizeTileLayers(x, y, cfg, tiles, MAX_LAYERS); int ntiles = RasterizeTileLayers(builder_params, x, y, cfg, tiles, MAX_LAYERS);
for (int i = 0; i < ntiles; ++i) { for (int i = 0; i < ntiles; ++i) {
TileCacheData* tile = &tiles[i]; TileCacheData* tile = &tiles[i];
@ -126,37 +127,24 @@ void NavMeshBuilder::BuildTiles(BuilderParams& builder_params)
} }
} }
int NavMeshBuilder::RasterizeTileLayers(const int tx, int NavMeshBuilder::RasterizeTileLayers(BuilderParams& builder_params,
const int tx,
const int ty, const int ty,
const rcConfig& cfg, const rcConfig& cfg,
TileCacheData* tiles, TileCacheData* tiles,
const int maxTiles) const int maxTiles)
{ {
#if 0
if (!m_geom || !m_geom->getMesh() || !m_geom->getChunkyMesh())
{
m_ctx->log(RC_LOG_ERROR, "buildTile: Input mesh is not specified.");
return 0;
}
#endif
#if 1
rcContext* ctx = nullptr;
rcAreaModification SAMPLE_AREAMOD_GROUND(SAMPLE_POLYAREA_TYPE_GROUND, SAMPLE_POLYAREA_TYPE_MASK); rcAreaModification SAMPLE_AREAMOD_GROUND(SAMPLE_POLYAREA_TYPE_GROUND, SAMPLE_POLYAREA_TYPE_MASK);
#endif
FastLZCompressor comp; FastLZCompressor comp;
RasterizationContext rc; RasterizationContext rc;
#if 1 #if 1
const float* verts = nullptr; rcContext* ctx = nullptr;
const int nverts = 0;
const rcChunkyTriMesh* chunkyMesh = nullptr;
#else
const float* verts = m_geom->getMesh()->getVerts();
const int nverts = m_geom->getMesh()->getVertCount();
const rcChunkyTriMesh* chunkyMesh = m_geom->getChunkyMesh();
#endif #endif
const float* verts = builder_params.gemo->GetVerts();
const int nverts = builder_params.gemo->GetVertCount();
const rcChunkyTriMesh* chunkyMesh = builder_params.gemo->GetChunkyMesh();
// Tile bounds. // Tile bounds.
const float tcs = cfg.tileSize * cfg.cs; const float tcs = cfg.tileSize * cfg.cs;
@ -248,13 +236,8 @@ int NavMeshBuilder::RasterizeTileLayers(const int tx,
} }
// (Optional) Mark areas. // (Optional) Mark areas.
#if 1 const ConvexVolume* vols = builder_params.gemo->GetConvexVolumes();
const ConvexVolume* vols = nullptr; for (int i = 0; i < builder_params.gemo->GetConvexVolumeCount(); ++i) {
int vol_count = 0;
#else
const ConvexVolume* vols = m_geom->getConvexVolumes();
#endif
for (int i = 0; i < vol_count; ++i) {
rcMarkConvexPolyArea(ctx, vols[i].verts, vols[i].nverts, rcMarkConvexPolyArea(ctx, vols[i].verts, vols[i].nverts,
vols[i].hmin, vols[i].hmax, vols[i].hmin, vols[i].hmax,
vols[i].areaMod, *rc.chf); vols[i].areaMod, *rc.chf);

View File

@ -24,7 +24,8 @@ public:
void InitTileCacheParams(BuilderParams& builder_params, dtTileCacheParams& tcparams); void InitTileCacheParams(BuilderParams& builder_params, dtTileCacheParams& tcparams);
void InitNavMeshParams(BuilderParams& builder_params, dtNavMeshParams& params); void InitNavMeshParams(BuilderParams& builder_params, dtNavMeshParams& params);
void BuildTiles(BuilderParams& builder_params); void BuildTiles(BuilderParams& builder_params);
int RasterizeTileLayers(const int tx, int RasterizeTileLayers(BuilderParams& builder_params,
const int tx,
const int ty, const int ty,
const rcConfig& cfg, const rcConfig& cfg,
TileCacheData* tiles, TileCacheData* tiles,

View File

@ -258,6 +258,11 @@ class InputGeom
public: public:
const float* GetMeshBoundsMin() const { return nullptr; } const float* GetMeshBoundsMin() const { return nullptr; }
const float* GetMeshBoundsMax() const { return nullptr; } const float* GetMeshBoundsMax() const { return nullptr; }
const float* GetVerts() const { return nullptr; }
int GetVertCount() const { return 0; }
const rcChunkyTriMesh* GetChunkyMesh() { return nullptr; }
const ConvexVolume* GetConvexVolumes() { return nullptr; }
int GetConvexVolumeCount() { return 0; }
}; };
struct BuilderParams struct BuilderParams