Malhas
As malhas são recursos compartilhados imutáveis que só podem ser criados por meio da conversão de modelos. As malhas são usadas para renderização, mas também para fornecer uma representação física para consultas de ray cast. Para colocar uma malha no espaço 3D, adicione um MeshComponent a uma Entidade.
Tipos de malha
Existem dois tipos distintos de recursos de malha no ARR: malhas triangulares e nuvens de pontos. Ambos os tipos são representados pela mesma classe de API Mesh
. Exceto por pequenas diferenças de comportamento para os 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 PLY é tratado como uma nuvem de pontos. Para obter a lista completa de formatos de arquivo suportados, consulte a lista de formatos de arquivo de origem.
Há duas diferenças significativas voltadas para o 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 unicamente pela sua cor por ponto,
- As nuvens de pontos não expõem um gráfico de cena. Em vez disso, todos os pontos são anexados à entidade do nó raiz.
Propriedades do recurso de malha
As propriedades da Mesh
classe são:
Materiais: Uma variedade de materiais. Cada material é usado por uma submalha diferente. Várias entradas na matriz podem fazer referência ao mesmo material. As entradas nesta matriz não podem ser alteradas em tempo de execução, no entanto, as propriedades do material podem. Para nuvens de pontos, essa matriz está vazia.
Limites: Uma caixa delimitadora alinhada ao eixo do espaço local (AABB) dos vértices da malha.
MeshComponent
A MeshComponent
classe é usada para colocar uma instância de um recurso de malha. Cada MeshComponent faz referência a uma única malha. Ele pode substituir quais materiais são usados para renderizar cada submalha.
Propriedades MeshComponent
Malha: O recurso de malha usado por este componente.
Materiais: A matriz de materiais especificados no próprio componente de malha. A matriz sempre terá 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 nesta matriz.
UsedMaterials: A matriz de materiais realmente usados para cada submalha. Será idêntico aos dados na matriz Materials , para valores não nulos. Caso contrário, ele contém o valor da matriz Materials na instância de malha. Esta matriz é somente leitura.
Partilha de malhas
Um Mesh
recurso pode ser compartilhado entre várias instâncias de componentes de malha. Além disso, o Mesh
recurso atribuído a um componente de malha pode ser alterado programaticamente a qualquer momento. O código abaixo demonstra 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;
}