Triangle Intersection: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Florian (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Florian (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{Stub}}
{{Stub}}


Gerade für [[Picking]] kann es sehr interessant sein beim Raytracing direkt die Triangles eines Modells für den Schnittpunkttest zu verwenden um dsa Picking sehr genau zu machen. Wenn man lediglich eine Bounding Box verwendet pickt man komplexere Modelle auch wenn man sie eigentlich garnicht anklickt.
__TOC__
 
Gerade für [[Picking]] kann es sehr interessant sein beim Raytracing direkt die Triangles eines Modells für den Schnittpunkttest zu verwenden um das Picking sehr genau zu machen. Wenn man lediglich eine <tt>BoundingBox</tt> verwendet pickt man komplexere Modelle auch wenn man sie eigentlich garnicht anklickt.


== Schnittberechnung Strahl - Triangle ==
== Schnittberechnung Strahl - Triangle ==


Die Berechnung der Schnittpunkte eines Strahls mit verschiedenen Bounding Volumes ist in XNA in den entsprechenden [[Struct]]s bereits implementiert. Die Schnittberechnung eines Strahls mit den Triangles eines Model Meshes muss man manuell implementieren. Die folgende Helfer-Klasse bietet dafür eine Methode. Diese Methode wird auch in den weiteren Code Samples zum Berechnen der Schnittpunkte verwendet.
Die Berechnung der Schnittpunkte eines Strahls mit verschiedenen Bounding Volumes ist in XNA in den entsprechenden [[Struct]]s bereits implementiert. Die Schnittberechnung eines Strahls mit den Triangles eines Model Meshes muss man dagegen manuell implementieren. Die folgende Helfer-Klasse bietet dafür eine Methode. Diese Methode wird auch in den weiteren Code Samples zum Berechnen der Schnittpunkte verwendet.


<source lang="csharp">
<source lang="csharp">
Zeile 109: Zeile 111:
== Auslesen des Meshs eines Models ==
== Auslesen des Meshs eines Models ==


Die einzige Möglichkeit bei XNA an die Triangles eines Modells zu gelangen ist die Vertex Buffer und Index Buffer der einzelnen Modelmeshes auszulesen. Die folgende Klasse liest diese beiden für ein Model-Mesh aus und speichert sie in Member-Variablen zwischen. Zusätzlich bietet sie Methoden um eine Bounding Box oder Bounding Sphere für die Triangles zu erstellen. Ebenfalls implementiert ist eine Intersect-Methode um den Schnittpunkt eines Strahls mit den Triangles berechnen zu können welche genauso funktioniert wie die Intersect-Methoden der Bounding Volume und Ray Structs.
Die einzige Möglichkeit bei XNA an die Triangles eines Modells zu gelangen ist die <tt>VertexBuffer</tt> und <tt>IndexBuffer</tt> der einzelnen Modelmeshes auszulesen. Die folgende Klasse liest diese beiden für ein Model-Mesh aus und speichert sie in Member-Variablen zwischen. Zusätzlich bietet sie Methoden um eine <tt>BoundingBox</tt> oder <tt>BoundingSphere</tt> für die Triangles zu erstellen. Ebenfalls implementiert ist eine <tt>Intersect()</tt>-Methode um den Schnittpunkt eines Strahls mit den Triangles berechnen zu können. Diese funktioniert genauso wie die <tt>Intersect()</tt>-Methoden der Bounding Volume und <tt>Ray</tt> Structs.


<source lang="csharp">
<source lang="csharp">
Zeile 230: Zeile 232:
}
}
</source>
</source>
== Verwendung der <tt>MeshTriangleData</tt> Klasse ==
blubb


[[Kategorie:Code-Beispiele]]
[[Kategorie:Code-Beispiele]]