2009-09-06 6 views
2

cela peut être une question opengl plus générale. en utilisant OpenGL ES for 2d, et en lisant les didacticiels, j'ai appris à faire les transformations matricielles de base comme la rotation et le déplacement d'un objet autour de l'écran. jusqu'ici, tout va bien - j'ai des objets qui bougent et tournent. La prochaine étape pour moi est de faire la détection de collision. quelque chose de simple comme vérifier l'intersection entre les boîtes englobantes serait probablement correct. cependant, je suis bloqué parce que pour savoir quand les boîtes de délimitation se croisent, je dois connaître les coordonnées traduites et pivotées de mes objets. mais je ne peux pas trouver un moyen d'obtenir ces chiffres d'OpenGL.en utilisant l'iPhone OpenGl ES efficacement pour 2d (et la détection de collision)

alors est-ce que je dois vraiment faire les rotations et les transformations moi-même, en plus d'avoir OpenGL les faire, juste pour obtenir les coordonnées traduites? ou existe-t-il un moyen d'appliquer les matrices actuelles à un sommet et d'obtenir les résultats? ne pouvait pas OpenGL faire les maths beaucoup plus vite que moi?

merci pour toute aide, j'apprécierais quelques conseils généraux sur la façon dont ce genre de chose est habituellement fait.

Répondre

7

Les informations visuelles et les informations de collision sont généralement traitées individuellement dans les jeux. Notez que vous devez réutiliser tous vos transformer les informations dans votre code de physique (c'est-à-dire toutes vos matrices), pas les informations de vertex. Cela semble un peu inefficace et contre-intuitif au début.

L'une des raisons est qu'il est inhabituel d'exiger une détection de collision à la précision du polygone. Au lieu de cela, les volumes approximatifs sont généralement suffisants.

Ainsi, vous allez rarement jamais entrer en collision avec un ensemble de polygones avec un autre ensemble de polygones - en fait, vous devriez essayer de ne pas le faire. Vous devriez entrer en collision avec des sphères, des boîtes, des lignes ou des sphères "balayées" (capsules). Les plus grands modèles non-convexes peuvent être divisés en plusieurs volumes convexes et traités séparément. Donc, si vous utilisiez le maillage visuel directement pour une collision, votre code physique serait beaucoup plus lent que d'utiliser un maillage de moindre détail, ou un volume approximatif comme une sphère ou une boîte. C'est un peu plus douloureux, mais la partie lente de la collision n'est pas les transformations, c'est la détection réelle - donc cette méthode fonctionne réellement plus rapidement. En fonction de votre jeu, j'utiliserais autant que possible des sphères - elles n'ont pas besoin d'être pivotées et les tests sont faciles. Il est également facile de générer une sphère de délimitation au moment du chargement du modèle, avant que la géométrie ne disparaisse dans la zone GPU.

Cette book est une très bonne ressource, et il y a beaucoup d'informations online aussi bien.

0

Vous devriez faire les traductions et les rotations vous-même. Il est assez inefficace de demander des données à OpenGL. Les moteurs graphiques conservent souvent les données OpenGL (en particulier les données d'état) et ne disent à l'automate OpenGL que les informations minimales dont il a besoin.

Questions connexes