Limites mundiais - (0, tamanho) ou (-metade do tamanho, metade do tamanho)?

9

Ao criar um espaço de jogo no qual mover, desenhar e colidir objetos, é melhor ter o ponto (0,0) ou o ponto (0,0,0) no centro do seu espaço, de modo que os limites dos mundos são (-halfSize, halfSize), ou é melhor que ele esteja no canto mais distante do seu espaço, para que os limites sejam (0, tamanho)?

Quais são os prós e os contras de cada um, e que tipo de problemas eles implicam? Ou isso realmente não importa?

Parece um pequeno detalhe, mas eu queria ver se talvez houvesse problemas importantes que talvez eu estivesse ignorando.

GarrickW
fonte

Respostas:

15

Parece-me que ter o centro do seu espaço (0, 0, 0) é melhor. Supondo que você esteja usando um formato assinado para representar posições no espaço, um centro de (0, 0, 0) permite que você use as partes negativa e positiva do seu formato, o que pode fazer maravilhas pela precisão de flutuadores e intervalo para números inteiros assinados . Isso pode não importar para escalas pequenas, mas para escalas grandes, pode fazer toda a diferença, ou seja, antes que você precise criar um novo sistema inteiramente.

Só para esclarecer: como você está criando um mundo de jogo, que eu assumo que você está processando, o formato final no qual você converterá será flutuante, que é como você sabe, um formato assinado. Nesse caso, você pode chegar a uma situação em que (0, tamanho) não pode ser representado, enquanto (-HalfSize, HalfSize) pode ser. Se você não planeja renderizar e pode escolher um formato arbitrário, use qualquer um dos estilos, embora eu ainda prefira pessoalmente o estilo mencionado acima.

parar
fonte
+1, muitas simulações de física também usam esse intervalo, provavelmente por esse motivo.
MichaelHouse
11
Referências úteis: altdevblogaday.com/2012/02/22/…
leander
11
Também bastante conhecido, mas possivelmente um pouco difícil para os não iniciados: docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - "O que cada cientista computador deve saber sobre Floating-Point Arithmetic"
Leander
5

Isso não importa particularmente. Contanto que você seja consistente durante todo o jogo.

Acredito que a abordagem mais comum é ter os limites do mundo centrados (0,0), o que significa que você terá seus limites afastados -halfSize, halfSize. Como a maioria das estruturas de dados que representam a posição (Vetor2 ou Vetor3) é padronizada como zeros, você sabe que o posicionamento padrão dos objetos está no centro do mundo (em vez de no canto inferior).

MichaelHouse
fonte