網狀
網格是固定的共用資源,只能透過模型轉換來建立。 網格用於轉譯,但也可提供光線轉換查詢的物理表示法。 若要將網格放在 3D 空間中,請將 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;
}