He estado luchando con una decisión sobre si implementar o no un gráfico de escena en mi juego. Tengo algunos casos de uso que requieren una herramienta de este tipo, pero no he podido obtener algunos de los detalles de implementación.
Algunos antecedentes: estoy escribiendo un juego de tipo tirador espacial dirigido a plataformas móviles (Android, principalmente) y mi código es casi completamente C ++. No estoy usando ningún middleware; Los motores de renderizado y física en particular son mis propias creaciones. Mi motor de física actualiza las ubicaciones de los objetos en función de las fuerzas y los impulsos. Todavía no tengo un sistema de animación, pero puedo visitarlo en algún momento (que puede o no tener algo que ver con esta discusión).
Primero, describiré un buen caso de uso. Me gustaría tener un jefe que se compone de varias partes discretas, cada una de las cuales puede dañarse / destruirse de forma independiente. Por ejemplo, podría tener un jefe que tiene un brazo que puede recibir daño independientemente del resto de la entidad del jefe. Cuando se destruye el brazo, un efecto de partículas de fuego ubicado en el hombro del jefe podría indicar que el brazo ahora está destruido.
Tal como están las cosas, he decidido intentar resolver tales problemas con restricciones en mi motor de física para mantener juntos tales objetos compuestos. Una de estas restricciones proporciona 0 grados de libertad y es esencialmente una matriz de transformación. Esto es realmente un intento de eludir un problema que finalmente me apagó de los gráficos de escena en primer lugar, como se describe a continuación.
La razón principal por la que rechacé el uso de un gráfico de escena es porque no pude encontrar una manera eficiente de mantener los objetos anidados (objetos que heredan una transformación de sus padres) tanto en el mundo de la física como en la escena de representación. El mundo de la física necesita que los objetos estén en el espacio mundial (o al menos el mismo espacio) mientras que la escena de representación necesita objetos en el espacio primario. El seguimiento de las ubicaciones en ambos espacios puede ayudar (y ser inevitable), pero plantea sus propias preocupaciones, entre las cuales se relaciona el rendimiento.
Sin embargo, dados los casos de uso como el descrito anteriormente, creo que ser capaz de 'trabajar' en el espacio primario será muy importante, y tratar de forzar a mi motor de física a mantener estas relaciones mediante el uso de restricciones va a ser problemático.
Dado el caso de uso y la situación descrita anteriormente, ¿debería usar una estructura gráfica para pasar las transformaciones de un objeto a otro? Si es así, ¿cómo debería mi motor de física calcular nuevas ubicaciones y realizar pruebas de intersección para objetos en diferentes espacios?