Hálók
A hálók nem módosítható megosztott erőforrások, amelyek csak modellkonvertálással hozhatók létre. A hálók renderelésre szolgálnak, de fizikai ábrázolást is biztosítanak a sugár leadott lekérdezésekhez. Ha egy hálót 3D térben szeretne elhelyezni, adjon hozzá egy MeshComponentet egy entitáshoz.
Hálótípusok
Az ARR-ben két különböző típusú hálóerőforrás létezik: háromszög alakú hálók és pontfelhők. Mindkét típust ugyanaz az API-osztály Mesh
jelöli. A különböző hálótípusok viselkedésének kisebb eltérései kivételével a közzétett API-funkciók azonosak.
A konvertálási szolgáltatás automatikusan meghatározza a megfelelő hálótípust a forrásfájlkiterjesztés alapján. Az FBX-fájlok például mindig háromszög alakú hálóként lesznek konvertálva, míg a PLY pontfelhőként van kezelve. A támogatott fájlformátumok teljes listáját a forrásfájlformátumok listájában találja.
A pontfelhő- és háromszögháló-konverziók között két jelentős, felhasználó által néző különbség van:
- A pontfelhő-hálók nem fednek fel anyagokat. A pontok vizuális megjelenését kizárólag a pontonkénti színük határozza meg,
- pontfelhők nem fednek fel jelenetdiagramot. Ehelyett minden pont a gyökércsomópont-entitáshoz van csatolva.
Mesh-erőforrás tulajdonságai
Az Mesh
osztály tulajdonságai a következők:
Anyagok: Anyagtömb. Minden egyes anyagot egy másik almesh használ. A tömb több bejegyzése is hivatkozhat ugyanarra az anyagra. A tömb bejegyzései futásidőben nem módosíthatók, azonban az anyagtulajdonságok nem. Pontfelhők esetén ez a tömb üres.
Határvonalak: A hálócsúcsok helyi tértengelyhez igazított határolókerete (AABB).
MeshComponent
Az MeshComponent
osztály egy hálóerőforrás egy példányának elhelyezésére szolgál. Minden MeshComponent egyetlen hálóra hivatkozik. Felülbírálhatja az egyes aljelentések megjelenítéséhez használt anyagokat.
MeshComponent-tulajdonságok
Mesh: Az összetevő által használt hálóerőforrás.
Anyagok: A hálóösszetevőn megadott anyagok tömbje. A tömb hossza mindig megegyezik a hálóerőforrás Anyag tömbjének hosszával. A háló alapértelmezett értékétől nem felülbírált anyagok null értékre vannak beállítva ebben a tömbben.
UsedMaterials: A ténylegesen használt anyagok tömbje minden almesh. A nem null értékek esetében az Anyagok tömb adataival azonos lesz. Ellenkező esetben a hálópéldány Anyagok tömbjének értékét tartalmazza. Ez a tömb írásvédett.
Hálók megosztása
Az Mesh
erőforrások a hálóösszetevők több példányán is megoszthatók. Továbbá a Mesh
hálóösszetevőhöz rendelt erőforrás programozott módon bármikor módosítható. Az alábbi kód bemutatja, hogyan klónozhat egy hálót:
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;
}