你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

网格

网格是一种不可变的共享资源,只能通过模型转换来创建。 网格用于呈现,但也为光线转换查询提供物理表示形式。 若要在三维空间中放置网格,可将 MeshComponent 添加到实体

网格类型

ARR 中有两种不同的网格资源类型:三角网格和点云。 这两种类型都由同一 API 类 Mesh 来表示。 除了不同网格类型的行为略有差异外,公开的 API 功能是相同的。

转换服务按源文件扩展名自动确定适当的网格类型。 例如,FBX 文件始终转换为三角网格,而 PLY 则被视为点云。 有关受支持的文件格式的完整列表,请参阅源文件格式的列表。

点云和三角网格转换之间存在两个重要的面向用户的差异:

  • 点云网格不公开任何材料。 点的视觉外观完全取决于其每点颜色,
  • 点云不公开场景图。 相反,所有点都附加到根节点实体。

网格资源属性

Mesh 类属性为:

  • 材料:材料阵列。 每种材料由不同的子网格使用。 阵列中的多个条目可引用相同的材料。 此数组中的条目在运行时无法更改,但材料属性可以更改。 对于点云,此数组为空。

  • 边界:网格顶点的局部空间轴对齐边界框 (AABB)。

MeshComponent

MeshComponent 类用于放置网格资源的实例。 每个 MeshComponent 引用单一网格。 它可能替代用于渲染每个子网格的材料。

MeshComponent 属性

  • 网格:此组件使用的网格资源。

  • 材料:网格组件自身指定的材料阵列。 该阵列的长度始终与网格资源上的“材料”阵列相同。 在此阵列中,不应被网格默认值覆盖的材料应设置为 null

  • UsedMaterials:每个子网格实际使用的材料阵列。 对于非 null 值,将与“材料”阵列中的数据完全相同。 否则,它将包含来自网格实例中“材料”阵列的值。 此数组是只读的。

网格共享

网格组件的多个实例之间可以共享 Mesh 资源。 而且,分配给网格组件的 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;
}

API 文档

后续步骤