Compartilhar via


Malhas

As malhas são um recurso compartilhado imutável que só pode ser criado por meio da conversão de modelo. As malhas são usadas para renderização, mas também para fornecer uma representação física de consultas de conversão de raio. Para posicionar uma malha no espaço 3D, adicione um MeshComponent a uma Entidade.

Tipos de malha

Há dois tipos distintos de recursos de malha no ARR: malhas triangulares e nuvens de pontos. Os dois tipos são representados pela mesma classe de API: Mesh. Com exceção de pequenas diferenças de comportamento nos tipos de malha distintos, a funcionalidade da API exposta é idêntica.

O serviço de conversão determina automaticamente o tipo de malha apropriado por extensão de arquivo de origem. Por exemplo, um arquivo FBX é sempre convertido como uma malha triangular, enquanto o PLY é tratado como uma nuvem de pontos. Para obter a lista completa de formatos de arquivo com suporte, confira a lista de formatos de arquivo de origem.

Há duas diferenças significativas voltadas ao usuário entre as conversões de malha triangular e de nuvem de pontos:

  • As malhas de nuvens de pontos não expõem nenhum material. A aparência visual dos pontos é definida exclusivamente pela cor de cada ponto,
  • as nuvens de pontos não expõem um grafo de cena. Nesse caso, todos os pontos são anexados à entidade de nó raiz.

Propriedades do recurso de malha

As propriedades da classe Mesh são:

  • Materials: uma matriz de materiais. Cada material é usado por uma submalha diferente. Várias entradas na matriz podem referenciar o mesmo material. As entradas nessa matriz não podem ser alteradas em tempo de execução, no entanto, as propriedades do material podem. Para nuvens de pontos, essa matriz fica vazia.

  • Bounds: uma AABB (caixa delimitadora alinhada ao eixo) do espaço local dos vértices de malha.

MeshComponent

A classe MeshComponent é usada para posicionar uma instância de um recurso de malha. Cada MeshComponent faz referência a uma única malha. Ele pode substituir os materiais usados para renderizar cada submalha.

Propriedades de MeshComponent

  • Mesh: o recurso de malha usado por esse componente.

  • Materials: a matriz de materiais especificada no próprio componente de malha. A matriz terá sempre o mesmo comprimento que a matriz Materiais no recurso de malha. Os materiais que não devem ser substituídos do padrão de malha são definidos como nulos nessa matriz.

  • UsedMaterials: a matriz de materiais realmente usados em cada submalha. Será idêntico aos dados na matriz Materiais , para valores não nulos. Caso contrário, conterá o valor da matriz Materiais na instância de malha. Essa matriz é somente leitura.

Compartilhamento de malhas

É possível compartilhar um recurso Mesh entre várias instâncias de componentes de malha. Além disso, o recurso Mesh atribuído a um componente de malha pode ser alterado programaticamente a qualquer momento. O código abaixo mostra como clonar uma malha:

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

Documentação da API

Próximas etapas