Condividi tramite


Mesh

Le mesh sono risorse condivise non modificabili che possono essere create solo tramite la conversione del modello. Le mesh vengono usate per il rendering, ma anche per fornire una rappresentazione fisica per le query ray cast. Per posizionare una mesh nello spazio 3D, aggiungere un oggetto MeshComponent a un'entità.

Tipi di mesh

Esistono due tipi distinti di risorse mesh in ARR: mesh triangolari e nuvole di punti. Entrambi i tipi sono rappresentati dalla stessa classe MeshAPI . Ad eccezione delle piccole differenze di comportamento per i tipi di mesh distinti, la funzionalità dell'API esposta è identica.

Il servizio di conversione determina automaticamente il tipo di mesh appropriato in base all'estensione del file di origine. Ad esempio, un file FBX viene sempre convertito come mesh triangolare, mentre PLY viene considerato come una nuvola di punti. Per l'elenco completo dei formati di file supportati, vedere l'elenco dei formati di file di origine.

Esistono due differenze significative per l'utente tra le conversioni di mesh triangolare e cloud a punti:

  • Le mesh cloud punto non espongono materiali. L'aspetto visivo dei punti è definito esclusivamente dal colore per punto,
  • le nuvole di punti non espongono un grafico della scena. Al contrario, tutti i punti vengono collegati all'entità del nodo radice.

Proprietà delle risorse mesh

Le proprietà della Mesh classe sono:

  • Materiali: matrice di materiali. Ogni materiale viene utilizzato da un submesh diverso. Più voci nella matrice possono fare riferimento allo stesso materiale. Le voci in questa matrice non possono essere modificate in fase di esecuzione, ma le proprietà del materiale possono. Per le nuvole di punti, questa matrice è vuota.

  • Limiti: un rettangolo delimitatore allineato all'asse dello spazio locale (AABB) dei vertici della mesh.

MeshComponent

La MeshComponent classe viene usata per inserire un'istanza di una risorsa mesh. Ogni MeshComponent fa riferimento a una singola mesh. Può eseguire l'override dei materiali utilizzati per eseguire il rendering di ogni sottomesi.

Proprietà MeshComponent

  • Mesh: risorsa mesh usata da questo componente.

  • Materiali: matrice di materiali specificati nel componente mesh stesso. La matrice avrà sempre la stessa lunghezza della matrice Materials nella risorsa mesh. I materiali che non devono essere sottoposti a override dall'impostazione predefinita della mesh sono impostati su Null in questa matrice.

  • UsedMaterials: matrice di materiali effettivamente utilizzati per ogni submesh. Sarà identico ai dati nella matrice Materials , per i valori non Null. In caso contrario, contiene il valore della matrice Materials nell'istanza di mesh. Questa matrice è di sola lettura.

Condivisione di mesh

Una Mesh risorsa può essere condivisa tra più istanze di componenti mesh. Inoltre, la Mesh risorsa assegnata a un componente mesh può essere modificata a livello di codice in qualsiasi momento. Il codice seguente illustra come clonare una mesh:

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;
}

Documentazione sull'API

Passaggi successivi