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 삼각형에 액세스하는 방법을 보여줍니다.