Triangle Intersection: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Florian (Diskussion | Beiträge)
Florian (Diskussion | Beiträge)
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]]