你当前正在访问 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;
}