渲染 NavData

在编辑器或游戏的 3D 视图中,您可以从数据库中渲染全部游戏 NavData。这有助于检查您的 NavData 是否已正确加载、是否正确匹配地形等。

访问数据库中的 NavData

  1. 创建从 IVisualGeometry 类中派生的类别。
    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 类的一个实例。

  2. 创建 NavDataVisualGeometryBuilder) 类的某个实例,然后通过调用将其传递到 Database::SetVisualGeometry()
        // 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);
    
  3. 初始化数据库,然后将您的 NavData 添加到数据库。您可以使用直接方法或异步方法将 NavData 添加到数据库。请参见在运行时使用 NavData
  4. 调用 Database::BuildVisualGeometry(),使 IVisualGeometry 实例中的 NavData 三角形始终处于最新状态。您不必跟踪数据库添加或删除了哪些 NavData。但您可以在每次 Database::HasChangedLastFrame() 返回的结果为 True 时,调用 BuildVisualGeometry(),如下所示。
    
    while (gameLoopRunning)
    {
            world->Update();
            if (database->HasChangedLastFrame())
                database->BuildVisualGeometry(); // Call BuildVisualGeometry() only if database has changed.
    }
    

    基于 IVisualGeometry 的实施情况,您可以在游戏或编辑器中使用三角形。

示例

有关代码样本,请参见 Tutorial_VisualGeometry.cpp。本教程介绍了如何访问数据库中加载的 NavData 三角形。