World Bounds - (0, rozmiar) czy (-HalfSize, HalfSize)?

9

Tworząc przestrzeń gry, w której można przesuwać, rysować i kolidować obiekty, lepiej mieć punkt (0,0) lub punkt (0,0,0) znajdujący się na środku przestrzeni, tak aby granice światów są (-halfSize, halfSize), czy może lepiej jest znajdować się w odległym rogu twojej przestrzeni, więc granice są (0, rozmiar)?

Jakie są zalety i wady każdego z nich i z jakimi problemami się wiążą? Czy to naprawdę nie ma znaczenia?

Wydaje się to drobnym szczegółem, ale chciałem sprawdzić, czy są jakieś ważne problemy, które mógłbym przeoczyć.

GarrickW
źródło

Odpowiedzi:

15

Wydaje mi się, że lepiej jest mieć środek swojej przestrzeni (0, 0, 0). Zakładając, że używasz formatu ze znakiem do reprezentowania pozycji w przestrzeni, środek (0, 0, 0) pozwala na użycie zarówno ujemnych, jak i dodatnich części twojego formatu, co może zdziałać cuda dla precyzji dla liczb zmiennoprzecinkowych i zakresu dla liczb całkowitych ze znakiem . Może to nie mieć znaczenia w przypadku małych skal, ale w przypadku dużych skal może mieć znaczenie, to znaczy, zanim całkowicie wymyślisz nowy system.

Aby wyjaśnić: biorąc pod uwagę, że tworzysz świat gry, który, jak zakładam, renderujesz, ostatecznym formatem, na który będziesz konwertować, będzie format zmiennoprzecinkowy, który jest, jak wiadomo, formatem podpisanym. W takim przypadku możesz dojść do sytuacji, w której (0, rozmiar) nie może być reprezentowane, podczas gdy (-HalfSize, HalfSize) może być. Jeśli nie planujesz renderować i możesz wybrać dowolny format, użyj dowolnego stylu, choć osobiście wolałbym wyżej wymieniony styl.

Parar
źródło
+1, wiele symulacji fizyki również korzysta z tego zakresu, prawdopodobnie z tego powodu.
MichaelHouse
1
Przydatne odnośniki: altdevblogaday.com/2012/02/22/...
Leander
1
Również dość dobrze znany, ale być może nieco trudny dla niewtajemniczonych: docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - „Co każdy informatyk powinien wiedzieć o arytmetyki zmiennoprzecinkowej”
leander
5

To nie ma szczególnego znaczenia. Tak długo, jak jesteś konsekwentny przez całą grę.

Uważam, że bardziej powszechnym podejściem jest koncentrowanie się wokół granic świata (0,0), co oznacza, że ​​przekraczasz granice -halfSize, halfSize. Ponieważ większość struktur danych, które reprezentują pozycję (Vector2 lub Vector3) domyślnie na zerach, wiesz, że domyślne ustawienie obiektów znajduje się w środku świata (zamiast w dolnym rogu).

MichaelHouse
źródło