Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: tamat en 13 de Julio de 2011, 10:31:37 PM

Título: Colisiones, Fisica básica y escaleras
Publicado por: tamat en 13 de Julio de 2011, 10:31:37 PM
Estoy tratando de hacer un FPS muuuy básico y me gustaría tener una fisica elemental.

Hasta ahora lo que hacía era crear una caja que envolvía al personaje y para cada movimiento testeaba primero si la caja colisionaba, si lo hacía anulaba el movimiento.

Esto funcionaba perfectamente hasta que decidí ponerle escaleras. Obviamente la caja choca con el primer escalon y el personaje no sube.

Mi primera aproximación fué calcular la envolvente de los puntos que colisionan, y si la máxima Y quedaba por encima de la posicion del player más un umbral, elevar el personaje hasta esa Y, pero la cosa se está empezando a complicar en casos en los que la pared es rugosa, ademas de que la colision de caja con mesh la hago lanzando rayos y en funcion de como salen esos rayos a veces no colisiona o colisionan haciendo que le personaje trepe paredes.

Me preguntaba si no habrá una aproximación a este problema que sea más asequible y simple.

Gracias
Título: Re: Colisiones, Fisica básica y escaleras
Publicado por: blau en 14 de Julio de 2011, 12:41:42 AM
A bote pronto y sin ser un experto:

1. ¿Usar un modelo del escenario con menos poligonos para las colisiones? Vamos evitar esas rugosidades que comentabas con un escenario mas simple.

2. Detectar que es una escalera y actuar de manera especial, o tener algun camino predeterminado...
Título: Re: Colisiones, Fisica básica y escaleras
Publicado por: Warchief en 14 de Julio de 2011, 01:58:32 AM
1) Tira dos rayos horizontales a la altura de la cadera desde posicion actual a actual+movimiento. Si hay colision, stop en actual.
2) Tira un rayo vertical por pie en la posicion deseada (actual + movimiento)
Con eso deberias poder usar tu aproximacion del umbral.

Cuando tengas eso puedes usar la normal de colision (normal del poligono en el punto de colision del rayo) para cambiar el movimiento, en vez de hacer stop. Esto hace que el personaje deslice evitando el obstaculo. (Me refiero a los rayos horizontales, claro)

Para las paredes rugosas usa un plano si la rugosidad es mas pequenya que el personaje.
Título: Re: Colisiones, Fisica básica y escaleras
Publicado por: tamat en 14 de Julio de 2011, 02:08:55 PM
creo que eso puede funcionar, el problema es que no tengo normales de colision porque uso voxeles, pero bueno, probaré lo de tirar rayos 'en L' para el tema de las escaleras, es mejor approach que el que uso ahora.

Gracias!
Título: Re: Colisiones, Fisica básica y escaleras
Publicado por: Warchief en 14 de Julio de 2011, 08:15:31 PM
No he trabajado con voxels, pero supongo que se puede hacer una aproximacion de la normal tomando los voxels vecinos del que colisiona o aplicando un LOD mayor sobre el que colisiona, de forma que se pueda construir un plano a partir de 3 puntos.