在编辑器或游戏的 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 的实施情况,您可以在游戏或编辑器中使用三角形。