在编辑器或游戏的 3D 视图中,您可以从数据库中渲染全部游戏 NavData。这有助于检查您的 NavData 是否已正确加载、是否正确匹配地形等。
class NavDataVisualGeometryBuilder : public Kaim::IVisualGeometry { public: virtual void DoBegin(const Kaim::VisualGeometrySetupConfig& /*setupConfig*/) { m_triangles.Clear(); } virtual void DoPushTriangle(const Kaim::VisualTriangle& triangle) { m_triangles.PushBack(triangle); } virtual void DoPushLine(const Kaim::VisualLine& /*visualLine*/) {} virtual void DoPushText(const Kaim::VisualText& /*visualText*/) {} virtual void DoEnd() {} KyUInt32 GetTriangleCount() const { return m_triangles.GetCount(); } private: Kaim::KyArray<Kaim::VisualTriangle> m_triangles; };
每次请求数据库中的 NavData 三角形时,它们将会传递到 NavDataVisualGeometryBuilder 类的一个实例。
// Create a world and a database.
Kaim::Ptr<Kaim::World> world = *KY_NEW Kaim::World;
Kaim::Database* database = world->GetDatabase(0);
Kaim::Ptr<Kaim::NavData> navData = *KY_NEW Kaim::NavData(database);
Kaim::Ptr<NavDataVisualGeometryBuilder> geometry = *KY_NEW NavDataVisualGeometryBuilder;
database->SetVisualGeometry(geometry);
while (gameLoopRunning)
{
world->Update();
if (database->HasChangedLastFrame())
database->BuildVisualGeometry(); // Call BuildVisualGeometry() only if database has changed.
}
基于 IVisualGeometry 的实施情况,您可以在游戏或编辑器中使用三角形。