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. IVisualGeometry インスタンスの NavData の三角形を最新に保つには、Database::BuildVisualGeometry() を呼び出します。どの 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 の三角形にアクセスする方法を示します。