Meshes

Meshes zijn onveranderbare gedeelde resources die alleen kunnen worden gemaakt via modelconversie. Meshes worden gebruikt voor rendering, maar ook om een fysicaweergave te bieden voor raycast-query's. Als u een mesh in 3D-ruimte wilt plaatsen, voegt u een MeshComponent toe aan een entiteit.

Mesh-typen

Er zijn twee verschillende soorten mesh-resources in ARR: driehoekige meshes en puntwolken. Beide typen worden vertegenwoordigd door dezelfde API-klasse Mesh. Behalve kleine verschillen in gedrag voor de verschillende mesh-typen, is de beschikbare API-functionaliteit identiek.

De conversieservice bepaalt automatisch het juiste mesh-type per bronbestandsextensie. Een FBX-bestand wordt bijvoorbeeld altijd geconverteerd als een driehoekig mesh, terwijl PLY wordt behandeld als een puntwolk. Raadpleeg de lijst met bronbestandsindelingen voor de volledige lijst met ondersteunde bestandsindelingen.

Er zijn twee belangrijke gebruikersgerichte verschillen tussen puntcloud- en driehoekige mesh-conversies:

  • Puntwolk-meshes maken geen materialen beschikbaar. Het uiterlijk van punten wordt uitsluitend gedefinieerd door de kleur per punt,
  • puntwolken maken geen scènegrafiek beschikbaar. In plaats daarvan worden alle punten gekoppeld aan de hoofdknooppuntentiteit.

Mesh-resource-eigenschappen

De Mesh klasse-eigenschappen zijn:

  • Materialen: Een matrix met materialen. Elk materiaal wordt gebruikt door een andere submesh. Meerdere vermeldingen in de matrix kunnen verwijzen naar hetzelfde materiaal. Vermeldingen in deze matrix kunnen tijdens runtime niet worden gewijzigd, maar de materiaaleigenschappen kunnen wel. Voor puntwolken is deze matrix leeg.

  • Grenzen: Een begrenzingsvak met lokale ruimteas (AABB) van de mesh-hoekpunten.

MeshComponent

De MeshComponent klasse wordt gebruikt om een instantie van een mesh-resource te plaatsen. Elk MeshComponent verwijst naar één mesh. Het kan overschrijven welke materialen worden gebruikt om elke submesh weer te geven.

MeshComponent-eigenschappen

  • Mesh: De mesh-resource die door dit onderdeel wordt gebruikt.

  • Materialen: De matrix van materialen die zijn opgegeven op het mesh-onderdeel zelf. De matrix heeft altijd dezelfde lengte als de materiaalmatrix op de mesh-resource. Materialen die niet worden overschreven van de standaard mesh, worden ingesteld op null in deze matrix.

  • UsedMaterials: De matrix van daadwerkelijk gebruikte materialen voor elke submesh. Is identiek aan de gegevens in de matrix Materialen , voor niet-null-waarden. Anders bevat deze de waarde van de matrix Materialen in het mesh-exemplaar. Deze matrix heeft het kenmerk Alleen-lezen.

Delen van meshes

Een Mesh resource kan worden gedeeld over meerdere exemplaren van mesh-onderdelen. Bovendien kan de Mesh resource die is toegewezen aan een mesh-onderdeel op elk gewenst moment programmatisch worden gewijzigd. De onderstaande code laat zien hoe u een mesh kunt klonen:

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

API-documentatie

Volgende stappen