Limites du monde - (0, taille) ou (-HalfSize, HalfSize)?

9

Lors de la création d'un espace de jeu dans lequel déplacer, dessiner et heurter des objets, est-il préférable que le point (0,0) ou le point (0,0,0) soit au centre de votre espace, de telle sorte que les limites des mondes sont (-halfSize, halfSize), ou vaut-il mieux que ce soit au coin le plus éloigné de votre espace, donc les limites sont (0, taille)?

Quels sont les avantages et les inconvénients de chacun et quels types de problèmes entraînent-ils chacun? Ou cela n'a-t-il vraiment pas d'importance?

Cela semble être un détail mineur, mais je voulais voir s'il y avait peut-être des problèmes majeurs que je pourrais ignorer.

GarrickW
la source

Réponses:

15

Il me semble qu'avoir le centre de votre espace soit (0, 0, 0) c'est mieux. En supposant que vous utilisez un format signé pour représenter des positions dans l'espace, un centre de (0, 0, 0) vous permet d'utiliser à la fois les parties négatives et positives de votre format, ce qui peut faire des merveilles pour la précision des flottants et la plage des entiers signés . Cela peut ne pas être important pour les petites échelles, mais pour les grandes échelles, cela peut faire toute la différence, c'est-à-dire avant de devoir inventer un nouveau système entièrement.

Juste pour clarifier: étant donné que vous créez un monde de jeu, que je suppose que vous restituez, le format ultime vers lequel vous vous convertirez sera float, qui est comme vous le savez, un format signé. Dans ce cas, vous pouvez arriver à une situation où (0, Size) ne peut pas être représenté, alors que (-HalfSize, HalfSize) peut l'être. Si vous ne prévoyez pas de rendre et pouvez choisir un format arbitraire, utilisez l'un ou l'autre style, bien que je préfère toujours personnellement le style susmentionné.

parar
la source
+1, de nombreuses simulations physiques utilisent également cette plage, probablement pour cette raison.
MichaelHouse
1
Références utiles: altdevblogaday.com/2012/02/22/…
leander
1
Également assez bien connu mais peut-être un peu difficile pour les non-initiés: docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - "Ce que tout informaticien devrait savoir sur l'arithmétique à virgule flottante"
leander
5

Cela n'a pas vraiment d'importance. Tant que vous êtes cohérent tout au long de votre partie.

Je crois que l'approche la plus courante consiste à centrer les limites du monde (0,0), ce qui signifie que vous devriez vous éloigner de vos limites -halfSize, halfSize. Étant donné que la plupart des structures de données qui représentent la position (Vector2 ou Vector3) sont définies par défaut sur des zéros, vous savez que le placement par défaut des objets se trouve au centre du monde (plutôt que dans le coin inférieur).

MichaelHouse
la source