Udostępnij za pośrednictwem


Siatki

Siatki są niezmienialnymi zasobami udostępnionymi, które można tworzyć tylko za pomocą konwersji modelu. Siatki są używane do renderowania, ale także do zapewnienia reprezentacji fizyki dla zapytań rzutowania promieni. Aby umieścić siatkę w przestrzeni 3D, dodaj element MeshComponent do jednostki.

Typy siatki

Istnieją dwa różne typy zasobów siatki w ARR: trójkątne siatki i chmury punktowe. Oba typy są reprezentowane przez tę samą klasę Meshinterfejsu API . Z wyjątkiem drobnych różnic w zachowaniu różnych typów siatki uwidocznione funkcje interfejsu API są identyczne.

Usługa konwersji automatycznie określa odpowiedni typ siatki według rozszerzenia pliku źródłowego. Na przykład plik FBX jest zawsze konwertowany jako trójkątna siatka, natomiast PLY jest traktowany jako chmura punktowa. Pełną listę obsługiwanych formatów plików można znaleźć na liście formatów plików źródłowych.

Istnieją dwie znaczące różnice między konwersjami siatki punktowej i trójkątnej między chmurą punktową:

  • Siatki chmury punktowej nie ujawniają żadnych materiałów. Wygląd wizualizacji punktów jest definiowany wyłącznie przez ich kolor punktu,
  • chmury punktów nie uwidaczniają wykresu sceny. Zamiast tego wszystkie punkty są dołączone do jednostki węzła głównego.

Właściwości zasobu siatki

Właściwości Mesh klasy to:

  • Materiały: tablica materiałów. Każdy materiał jest używany przez inny podciąg. Wiele wpisów w tablicy może odwoływać się do tego samego materiału. Wpisy w tej tablicy nie mogą być zmieniane w czasie wykonywania, jednak właściwości materiału mogą. W przypadku chmur punktowych ta tablica jest pusta.

  • Granice: pole ograniczenia wyrównane do osi lokalnej (AABB) wierzchołków siatki.

MeshComponent

Klasa MeshComponent służy do umieszczania wystąpienia zasobu siatki. Każdy element MeshComponent odwołuje się do pojedynczej siatki. Może on zastąpić materiały używane do renderowania poszczególnych podciągów.

Właściwości meshComponent

  • Siatka: zasób siatki używany przez ten składnik.

  • Materiały: tablica materiałów określonych na samym składniku siatki. Tablica zawsze będzie mieć taką samą długość jak tablica Materials w zasobie siatki. Materiały, które nie są zastępowane z domyślnej siatki, są ustawione na wartość null w tej tablicy.

  • UsedMaterials: tablica rzeczywiście używanych materiałów dla każdego podiszu. Będą identyczne z danymi w tablicy Materials dla wartości innych niż null. W przeciwnym razie zawiera wartość z tablicy Materials w wystąpieniu siatki. Ta tablica jest tylko do odczytu.

Udostępnianie siatk

Zasób Mesh może być współużytkowany w wielu wystąpieniach składników siatki. Ponadto Mesh zasób przypisany do składnika siatki można zmienić programowo w dowolnym momencie. Poniższy kod pokazuje, jak sklonować siatkę:

Entity CloneEntityWithModel(RenderingConnection api, Entity sourceEntity)
{
    MeshComponent meshComp = sourceEntity.FindComponentOfType<MeshComponent>();
    if (meshComp != null)
    {
        Entity newEntity = api.CreateEntity();
        MeshComponent newMeshComp = api.CreateComponent(ObjectType.MeshComponent, newEntity) as MeshComponent;
        newMeshComp.Mesh = meshComp.Mesh; // share the mesh
        return newEntity;
    }
    return null;
}
ApiHandle<Entity> CloneEntityWithModel(ApiHandle<RenderingConnection> api, ApiHandle<Entity> sourceEntity)
{
    if (ApiHandle<MeshComponent> meshComp = sourceEntity->FindComponentOfType<MeshComponent>())
    {
        ApiHandle<Entity> newEntity = *api->CreateEntity();
        ApiHandle<MeshComponent> newMeshComp = api->CreateComponent(ObjectType::MeshComponent, newEntity)->as<RemoteRendering::MeshComponent>();
        newMeshComp->SetMesh(meshComp->GetMesh()); // share the mesh
        return newEntity;
    }
    return nullptr;
}

Dokumentacja interfejsu API

Następne kroki