2009-07-09 18 views
2

Je cherchais un tutoriel sur les systèmes de collision 3D par vertex (en utilisant C# et XNA, puisque je l'ai facilement disponible), mais ont seulement été capable de rassembler des morceaux. J'ai une très bonne compréhension à ce stade, mais il y a un trou assez grand et flagrant dans ma compréhension. Fondamentalement, mon problème se résume à: comment puis-je obtenir les polys et leurs infos?Je cherchais des tutoriels/des exemples pour me former sur la collision 3D per-poly

Est-ce que quelqu'un a de bonnes références? Remarque: même si j'utilise XNA et que je suis très intéressé par ce système, il s'agit davantage d'un exercice d'auto-éducation, et je suis intéressé par la façon de le faire dans d'autres systèmes si cela est fait différemment (OpenGL, OpenGL, Ce que je veux dire par "comment obtenir les polys", c'est si j'ai un objet 3D, et peut-être même une animation appliquée à cet objet, y at-il un système pour récupérer les polys rendus «informations (positions, etc.) pour les tests? La chose la plus logique à faire serait de récupérer les informations de poly après qu'elles ont été rendues, mais cela semble aussi excessivement cher, et je ne suis pas sûr de savoir comment y arriver de toute façon. Je n'étais pas sûr s'il y avait un meilleur moyen, ou si la récupération d'informations rendues à ce niveau était même possible.

+1

La détection de collision est complètement indépendante de XNA/OpenGL/etc. Je ne suis pas vraiment sûr de ce que vous entendez par "comment obtenir les polys et leurs infos?", Vous obtenez les polygones de l'endroit où vous voulez (le modèle, un fichier, votre cerveau, etc.) – Zifre

Répondre

2

Vous obtenez les informations de polygone du modèle. Il y aura un ensemble d'appels et/ou de méthodes qui vous renverront des choses comme des listes de points, des normales, des coordonnées de texture, etc., et une liste de faces qui référencent ces autres tableaux.

Il peut être assez difficile d'obtenir les données une fois qu'il a été envoyé à la carte graphique pour le rendu. Aussi une fois qu'il a été rendu, l'information est en 2D et non en 3D.

La collision par polygone coûte cher, ne serait-ce que parce que même des modèles modérément complexes peuvent contenir des centaines voire des milliers de polygones. La première étape consiste à essayer d'éliminer la plupart des informations en effectuant des collisions de boîtes englobantes. Ceux-ci vous diront que la plupart des objets de la scène n'entrent pas en collision les uns avec les autres. Vous pouvez ensuite vous concentrer sur les cas où les boîtes englobantes se croisent d'une manière ou d'une autre. L'utilisation d'une sphère de délimitation est une autre méthode et peut vous donner moins de faux positifs car la sphère délimitera l'objet plus étroitement qu'une boîte. Bien que les calculs pourraient être un peu plus chers. L'étape suivante consiste à prendre chaque polygone dans votre objet de test et à le vérifier par rapport aux autres objets. Recommencez avec un test de boîte englobante/sphère avant de vérifier tous les polygones de l'autre ou des autres objets.

Les mathématiques dont vous avez besoin devraient être couvertes dans n'importe quel livre décent sur les graphiques 3D.