Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda con Newton Dinamics. Mi Heroe a veces se hunde :(.

Iniciado por Oanime, 18 de Enero de 2008, 07:09:52 PM

« anterior - próximo »

Oanime

Hola,

Tengo una serie de tiles (en el mundo físico son cubos), y un personaje (que en el mundo físico es un elipsoide). El caso es que cuando muevo al jugador, de forma aleatoria se mete dentro de los tiles pero solo un poco, muy poco, pero suficiente para que se pare y no vaya en la dirección que le indico con los controles. A veces al seguir insistiendo se avanza de nuevo y ya se pone bien encima de los tiles. Sabe alguien como se puede solucionar eseto?

He intentando poner el softness del par de materiales del tio y de los tiles a 1 , activar el modo continuo, pero nada, lo mismo.

Si alguien pudiera echar una mano se lo agradecería,
Un saludo,
HexDump.

misscelan

Cuando un cuerpo se introduce dentro de otro suele ser por dos casos, aplicar una fuerza (gravedad muy agresiva) o velocidad demasiado grandes o modificar la matriz de posición, el primer caso debería solucionarse con el modo continuo o con el ajuste del softness, el otro no se debería usar.

Posiblemente el modelo no se pare por esa pequeña intrusión. Si en ningún momento modificas la posición del objeto de otra manera que no sean fuerzas o velocidades, desactiva la fricción para probar y fíjate que a la fuerza del callback siempre lleguen valores y que éstos sigan hasta el momento en que se ejecuta el NewtonUpdate.

Un saludo.

Oanime

A ver, Se para por que se hunde. He estado haciendo más pruebas y parece que se hunde en la junta de los polys. Mejor dicho he probado de 2 formas, la primera he usado la primitiva caja y he puesto un suelo de tiles. Cuando llegaba a la union de 2 tiles la mayoria de veces lo hacía, lo hacía hasta cuando los tiles estaban sola pados, es decir no había ningún tipo de hueco.
Despues he usado convex hull y parece que se metía (no siempre), en la arista diagonal que cruza la cara del cubo. Muy extraño, la verdad es qeu yo veo el ejemplo de newton y a él no se le mete en ningún sitio ¬¬.

Por otro lado, la fuerza es pequeña, es simplemente la fuerza de la gravedad, que la he reducido bastante para hacer pruebas y cuando la poní muy pequeña no pasaba, pero vaya que no pasaba por que no le daba tiempo a meterse digo yo.

Un saludo y a ver si podemos sacar algo en claro,
HexDump.

AgeR

Cada cuánto tiempo llamas a la función NewtonUpdate? (creo que se llamaba así). Supongo que habrás probado, pero si no, prueba reducir el tiempo entre llamadas.

Otras preguntas que se me ocurren... los cubos que comentas, están exactamente a la misma altura? Has comprobado que la representación gráfica es en efecto fiel a la física? El mundo lo creas con un NewtonCreateTreeCollision?

Oanime

Para q os hagais una idea esto es lo que estoy intentando hacer funcionar:

http://img88.imageshack.us/my.php?image=dibujofb6.jpg

1) Los tiles están bien alineados.
2) Ahora mismo estoy refrescando las físicas en cada frame.
3) como ves los cubos están todos a la misma altura (los que forman cada piso claro).
4) El mundo lo creo insertando bodies a saco, cada body un tile.


Gracias por adleantado,
HexDump.

AgeR

Yo apostaría por que el problema esté al llamar a NewtonUpdate una vez por frame, supongo que usando el timeDelta entre frames.

Echale un ojo a esto a ver si este código te resuelve el problema:
http://walaber.com/newton_wiki/index.php?title=What_value_should_I_pass_to_%22NewtonUpdate%3F

Por otro lado, por qué no creas el mundo físico usando un TreeCollision? Por lo que leí cuando estaba probando Newton, cualquier elemento que vaya a ser estático en el mundo, es recomendable meterlo en un treecollision ya que si no recuerdo mal, es lo que mejor funciona.

Oanime

Sí, bueno, tampoco estaba viendo que daba mejor rendimiento, solo intentando prototipar la lógica de player. Mañana le echar un ojo a eso...

Gracias por adelantado,
HexDump.

Tei

no se de que va el tema, porque nunca he trabajado con algo parecido, pero se me ocurre que si al movimiento del objeto le perturban los microleaks, que construyas un solo objeto, a ser posible fundiendo las tiles, para que no pueda haber leaks. Pero vamos, puesto que nunca he trabajado en algo asi, no tengo ni puta idea.

XÑA

Bienvenido al fántastico mundo de la física...en coma flotante :S

A mi me huele que te está pasando el consabido 'tunnelling'. La gran mayoría de engines de física adolecen de este problema, puesto que lo que hacen es comprobar la posición de los objetos en un momento dado.
Entonces tienes 2 opciones:

1. Aumentar el nº de llamadas a NewtonUpdate, con lo cual es cálculo es mucho más fino
2. Activa el tunnelling!!! Sí, Newton tiene gestión de tunelling por defecto y el problema...desparece!!!

Con el tunnelling, Newton en realidad lo que hace es extrusionar la geometría hacia la dirección en la que te mueves, pero claro, eso tiene un coste adicional de cálculo...






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.