Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: tamat en 19 de Junio de 2008, 08:36:15 PM

Título: Newton y aquí nada se mueve
Publicado por: tamat en 19 de Junio de 2008, 08:36:15 PM
Pues nada, que he tratado de meter Newton en mi juego y aquí nada se mueve.

Primero me lian con que las matrices hay que trasponerlas con respecto a opengl, pero si lo hago entonces todo implosiona.

Si no traspongo entonces aquí nada se mueve, y eso que he puesto gravedades, aceleraciones, etc.

Me tengo que estar olvidando de algo pero miro los ejemplos y es mas o menos lo mismo, voy a hacer un pequeño mapa aquí para ver si veis algo que yo no veo:


//al crear el mundo
// Create the newton world
s_World = NewtonCreate (NULL, NULL);

Vector3 minWorld(-100000,-100000,-100000);
Vector3 maxWorld(100000,100000,100000);
NewtonSetWorldSize(s_World, minWorld.v, maxWorld.v);

//...

//al crear la entidad
//Set the collision
Matrix44 offset;
offset.setTranslation( mesh->center.x, mesh->center.y, mesh->center.z );
physics_collision = NewtonCreateBox (s_World, mesh->halfsize.x, mesh->halfsize.y, mesh->halfsize.z, offset.m);
physics_body = NewtonCreateBody (s_World, physics_collision);
NewtonReleaseCollision (s_World, physics_collision);
NewtonBodySetMatrix(physics_body, model.m );
Vector3 force (0.0f, -100, 0.0f);
NewtonBodySetForce (physics_body, force.v );


//...

//al updatear
NewtonUpdate (s_World, elapsed);

//...

//al pillar la model
NewtonBodyGetMatrix(physics_body, temp.m);
Título: Newton y aquí nada se mueve
Publicado por: misscelan en 19 de Junio de 2008, 11:29:36 PM
Primero sacaría todo por pantalla para ver que hay realmente:


//esta en opengl pero creo que es muy claro

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 (Body, DebugShowGeometryCollision);


Luego creo que las fuerzas sólo las tiene en cuenta dentro de callbacks ( lo mismo me estoy pasando de listo pero recuerdo algo así)

Tendrías que añadir esto a tu cuerpo:


void ApplyForceAndTorqueEvent (const NewtonBody* body)
{
///aplicar la fuerza
}
NewtonBodySetForceAndTorqueCallback(fBody, ApplyForceAndTorqueEvent);


Y por último no se cuanto de grande se va a hacer tu proyecto, si es muy grande mejor que cargues el mapa como un objecto BSP de newton y dejar que pelee el solo.

Espero que te sirva de ayuda.

UN saludo.
Título: Newton y aquí nada se mueve
Publicado por: tamat en 19 de Junio de 2008, 11:35:39 PM
No conocía lo de sacar todo por pantalla, lo probaré.

Lo de usar los callbacks no me hace falta ya que ya tengo mi propio bucle de render, lo digo porque tambien probé de usar los callbacks y era lo mismo.

De momento no tengo mucha geometría, quería probar con dos cubos así que con Boxes ya tiraba.

Gracias por la ayuda
Título: Newton y aquí nada se mueve
Publicado por: tamat en 23 de Junio de 2008, 01:12:25 PM
Nada, esto sigue sin mover nada.

He probado todas las funciones de debug habidas y por haber y dumpean la escena perfectamente, pero por mas update que hago con el timestep que me de la gana aquí todas las matrices que recupero son la misma que puse al principio.

Solo seteo la matriz de cada objeto una vez, al principio para posicionar los objetos.

He probado con diferentes cajas de colision y el render es correcto.

Pero no se mueve nada, estoy rayado de cambiar cosas.

Cualquier consejo será bienvenido.
Título: Newton y aquí nada se mueve
Publicado por: tamat en 23 de Junio de 2008, 06:06:58 PM
Acabo de descubrir el fallo. El problema era que todo caía, incluido el suelo, y como la camara iba attachada a uno de los objetos pues no me daba cuenta. Cuando debugaba los valores no lo vi porque la gravedad era tan pequeña que no le afectaba.

En fin, ahora lo tengo mas o menos funcionando, pero tengo el problema de que mis objetos se hunden lentamente en el suelo. He probado cambiando propiedades como la gravedad, elasticidad, friccion, y softness pero nada, siguen hundiendose.

Alguien sabe por qué es?
Título: Newton y aquí nada se mueve
Publicado por: Prompt en 23 de Junio de 2008, 08:34:06 PM
No se nada del newton, pero seguramente deberias detectar la colision con el suelo y hacer reaccionar el objeto ya bien sea desactivando la fisica en el o aplicando efectos hasta que se "pare".

Saludos.
Título: Newton y aquí nada se mueve
Publicado por: tamat en 23 de Junio de 2008, 08:41:34 PM
Hasta donde yo se eso es tarea del motor de fisica, detectar la colisiones y reposicionar los objetos acorde al punto de colision.
Título: Newton y aquí nada se mueve
Publicado por: vicho en 23 de Junio de 2008, 10:53:19 PM
sobre de que se undan en el suelo? de cuanto es tu timestep?
Título: Newton y aquí nada se mueve
Publicado por: tamat en 24 de Junio de 2008, 12:47:42 AM
mi timestep es de 1/60, uso un collision tree enorme para la geometria del suelo, los objetos caen y al colisionar con el suelo toman la forma mas o menos correcta pero entonces empiezan a hundirse lentamente.
Título: Newton y aquí nada se mueve
Publicado por: misscelan en 24 de Junio de 2008, 01:54:01 AM
Prueba a cambiar el orden de los vertices de las caras a ver si va a estar cogiendo la normal al revés
Título: Newton y aquí nada se mueve
Publicado por: vicho en 24 de Junio de 2008, 02:19:40 AM
puede ser tambien la gravedad del mundo desestabilizando la simulacion. lo otro que e visto en otros engines como ODE es que esos problemas se pueden dar cuando se tienen parametros de la colicion muy grandes(en ODE por ejemplo el parametro CFM). no se como funcione newton
Título: Newton y aquí nada se mueve
Publicado por: Hans en 24 de Junio de 2008, 02:42:18 PM
Yo uso el wrapper de Newton para Ogre, así que hay cosas que me salto, pero eso que cuentas de objetos hundiéndose es como si no hubieras activado el modo de colisión continua, lo que con objetos muy pequeños ocasiona que estos atraviesen a otros más grandes. También puede ocurrir por no haber definido relaciones de colisión entre objetos.
Título: Newton y aquí nada se mueve
Publicado por: Marci en 24 de Junio de 2008, 04:26:27 PM
Me sonaba de haber visto algo asi. Es probable que ya lo hayas mirado pero por si acaso:

http://www.stratos-ad.com/forums3/viewtopic.php?t=10120&highlight=newton
Título: Newton y aquí nada se mueve
Publicado por: tamat en 24 de Junio de 2008, 05:29:28 PM
Interesante, probaré todo lo que habeis dicho mañana y os digo qué tal ha ido.
Título: Newton y aquí nada se mueve
Publicado por: tamat en 25 de Junio de 2008, 05:10:40 PM
He probado todo lo que me deciais y sigue sucediendo.

Las caras no estan invertidas (si las invierto entonces lo atraviesa directamente), el modo tunnelling está activado, ahora hago 100 steps por update con una fraccion mínima.

Pese a todo, mis objetos siguen hundiendose lenta e irremediablemente. :(