網狀

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

API 文件

下一步