Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Colisión con terrenos en Newton

Iniciado por AgeR, 05 de Diciembre de 2007, 09:00:30 PM

« anterior - próximo »

AgeR

Hola, ya hacía tiempo que no preguntaba nada por aquí.

Veréis, resulta que estoy tratando de integrar Newton en mi motorcillo, y se me ha ocurrido empezar por el terreno. La primera prueba es un cubo que dejo caer en el terreno, con montañas y tal. El tema es que el cubo se comporta más o menos bien... salvo porque cuando está a punto de detenerse, "salta" (se teletransporta más bien) a otro punto cercano del terreno. Esto lo hace varias veces, hasta que finalmente se detiene.

La verdad, no sé muy bien por qué sucede esto. El terreno se lo paso a Newton usando un CollisionTree y todo parece estar bien (escala y demás). He probado a variar el timestep con el que se actualiza el mundo, pero sigue produciéndose el mismo comportamiento. Me parece que el problema se da cuando el cubo pasa de estar en un triángulo a otro, aunque tampoco le veo demasiado sentido a esto...

Alguien que haya usado Newton tiene idea de por qué sucede esto?

Gracias!

misscelan

Has probado a mostrar el wireframe de newton?.

Qué valor has puesto para NewtonMaterialSetDefaultSoftness?

Si la fuerza aplicada es muy fuerte o tu frame rate bajo puede que atraviese el terreno, el valor de NewtonMaterialSetDefaultSoftness lo devolverá de nuevo arriba a la velocidad indicada (1.0 máxima).

Así que si atraviesa mucho terreno y le velocidad de recuperación es alta parecerá que da un salto.

Espero que te ayude.

Un saludo.

AgeR

El softness es de 0.05, no es este el motivo. Creo que no me he explicado bien, no son saltos, son teletransportes, pero no en Y, sino en X y Z, el cubo sigue estando en el suelo, pero de repente desaparece de un lugar y aparece en otro.

Tendré que mirar el wireframe a ver, ahora que lo dices, aunque ya intuyo que sucede cuando el cubo cambia de colisionar con un triángulo a hacerlo con otro, aunque si es así, sigo sin entenderlo  :roll:

misscelan

Otra posibilidad es que hayas pasado algunos vertices de las caras del tree en el orden inverso.

De todas maneras échale un ojo wl wireframe

void DebugShowGeometryCollision(const NewtonBody* body, int vertexCount, const float *faceVertec, int id)
{

   glBegin(GL_LINE_LOOP);
   {
       while (vertexCount--)
       {
           glVertex3f(faceVertec[0] , faceVertec[1], faceVertec[2]);
           faceVertec += 3;
       }
   }
   glEnd();
}

NewtonBodyForEachPolygonDo (newtonbody, DebugShowGeometryCollision);


Un saludo.

AgeR

He hecho un pequeño vídeo donde se aprecian los efectos. En el vídeo lanzo varios cubos de uno en uno (cada vez quito el anterior). En la mayoría de ocasiónes se pueden ver los "teletransportes" del cubo sin problemas.

Disculpad el fondo rojo, pero era la mejor forma de hacer bien visible el wireframe :P

http://www.youtube.com/watch?v=QHko-MseDZA

misscelan

La verdad es que es raro, es como si modificases directamente la posición del objeto.

En el callback de la gravedad qué haces?
En qué momentos alteras la matriz newton del objeto?

tamat

si tiras mas de un objeto los teletransporta a los dos a la vez?
Por un stratos menos tenso

AgeR

Gracias por la ayuda, al final entre ambos me habéis ayudado. El fallo era mío, ya que reutilizaba el cubo cada vez y seguramente por eso Newton se volvía loco.

Al probar con varios cubos a la vez, el problema ha desaparecido por completo, por eso creo que el problema era mío, al reutilizar el objeto del cubo.

Ahora funciona de lujo, muchas gracias  :D






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.