Triangle Intersection: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
| Zeile 234: | Zeile 234: | ||
== Verwendung der <tt>MeshTriangleData</tt> Klasse == | == Verwendung der <tt>MeshTriangleData</tt> Klasse == | ||
Bei der Verwendung der <tt>MeshTriangleData</tt> Klasse gibt es einige Punkte die man Wissen bzw. beachten muss. | |||
=== Erzeugung === | |||
Die <tt>MeshTriangleData</tt> Klasse basiert jeweils nur auf einem <tt>ModelMeshPart</tt>. Um Triangle Intersection für ein komplettes Modell zu ermöglichen muss man also für jedes <tt>ModelMeshPart</tt> des Modells eine eigene Instanz der <tt>MeshTriangleData</tt> Klasse erstellen. Wenn man sicher weiss dass das Modell nur aus einem <tt>ModelMesh</tt> und dieser wiederrum nur aus einem <tt>ModelMeshPart</tt> besteht kann man auf diese auch einfach über den Index 0 der <tt>ModelMeshCollection</tt> und der <tt>ModelMeshPartCollection</tt> der <tt>Model</tt> Klasse zugreifen (e.g. <tt>model.Meshes[0].MeshParts[0]</tt>). Hat man komplexere Modelle oder ist sich über deren Aufbau nicht sicher erstellt man am besten eine Zwischenklasse welche automatisch über alle <tt>ModelMeshes</tt> und <tt>ModelMeshParts</tt> des Modells iteriert und die entsprechende <tt>MeshTriangleData</tt> für jedes <tt>ModelMeshPart</tt> erzeugt, verwaltet und eine Schnittstelle für den Zugriff auf deren <tt>Intersect()</tt>-Methoden bereitstellt. | Die <tt>MeshTriangleData</tt> Klasse basiert jeweils nur auf einem <tt>ModelMeshPart</tt>. Um Triangle Intersection für ein komplettes Modell zu ermöglichen muss man also für jedes <tt>ModelMeshPart</tt> des Modells eine eigene Instanz der <tt>MeshTriangleData</tt> Klasse erstellen. Wenn man sicher weiss dass das Modell nur aus einem <tt>ModelMesh</tt> und dieser wiederrum nur aus einem <tt>ModelMeshPart</tt> besteht kann man auf diese auch einfach über den Index 0 der <tt>ModelMeshCollection</tt> und der <tt>ModelMeshPartCollection</tt> der <tt>Model</tt> Klasse zugreifen (e.g. <tt>model.Meshes[0].MeshParts[0]</tt>). Hat man komplexere Modelle oder ist sich über deren Aufbau nicht sicher erstellt man am besten eine Zwischenklasse welche automatisch über alle <tt>ModelMeshes</tt> und <tt>ModelMeshParts</tt> des Modells iteriert und die entsprechende <tt>MeshTriangleData</tt> für jedes <tt>ModelMeshPart</tt> erzeugt, verwaltet und eine Schnittstelle für den Zugriff auf deren <tt>Intersect()</tt>-Methoden bereitstellt. | ||
=== Bekommen der AbsoluteBoneTransforms === | |||
Der Konstruktor der <tt>MeshTriangleData</tt> Klasse benötigt ein Matrix-Array mit den absoluten Bone Transformationen des Modells, dieses kann man wie folgt aus der <tt>Model</tt> Klasse abfragen: | |||
<source lang="csharp"> | |||
Model model; | |||
//get the absolute bone transforms of the model | |||
Matrix[] absoluteBoneTransforms = new Matrix[model.Bones.Count]; | |||
model.CopyAbsoluteBoneTransformsTo(absoluteBoneTransforms); | |||
</source> | |||
[[Kategorie:Code-Beispiele]] | [[Kategorie:Code-Beispiele]] | ||
