Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre Ode...

Iniciado por DraKKaR, 21 de Julio de 2004, 12:46:50 AM

« anterior - próximo »

DraKKaR

 Hola, stratosfericos. Estos dias he estado tirándole un poco a ODE para insertarlo mínimamente en mi engine. He de decir a su favor que la API me ha encantado (aunque sea en llano C) y que la simulación de la dinámica de cuerpos sólidos es bastante buena.
Por contra, estoy teniendo algunos problemas con las colisiones. A veces los objetos no detectan colisiones contra un trimesh, y a veces, si el objeto va muy rápido, atraviesa la malla sin detectar colisión alguna.

¿Alguno de vosotros ha hecho funcionar decentemente (de forma estable) ODE?

AK47

 Saludos
Yo te recomendaria usar el Tokamak, ya que es algo mas rapido. Ademas su interfaz es en C++ (aunque evita en lo posible el uso de herencia y tal para que vaya mas rapido, segun dicen...), aunque la documentacion es casi inexistente :(
Con muy poco trabajo logre que mi terreno fuese colisionable y tener 100 cajas dando botes por ahi :D

Astat

 
CitarHe de decir a su favor que la API me ha encantado (aunque sea en llano C)

A mi tambien me gusta  ;)  aunque que sepas que existe tambien un interface para c++

CitarA veces los objetos no detectan colisiones contra un trimesh

Puede que tengas problemas con el AutoDisable (caracteristica de ODE mas o menos nueva). Prueba a desactivar el AutoDisable.

Citarsi el objeto va muy rápido, atraviesa la malla sin detectar colisión alguna

Debe ser porque usas un StepSize muy grande. En tu funcion de actualizacion deberias repetir  dWorldStep(m_OdeWorldID, fStepSize); las veces que quieras que se ejecute la fisica (yo lo tengo puesto a 60FPS) y usar un fStepSize lo mas pequeño posible.

Un saludo

Astat

 
CitarYo te recomendaria usar el Tokamak, ya que es algo mas rapido.

La ultima version de ODE,  0.5, tiene una velocidad comparable a Tokamak (comprobado en los test). Si a eso le sumamos que ODE es opensource, tiene una buena documentacion, bastantes tutoriales, y que tiene una lista de correo muy activa, hace de ODE una opcion mas que interesante.

Un saludo

DraKKaR

 Si el tokamak fue la primera opción que consideré, debido a algunos comentarios que leí en este foro sobre ambos motores, pero ahora no recuerdo porqué me decanté por ODE (era tokamak libre? o puede que no fuera portable?)

CitarA mi tambien me gusta  aunque que sepas que existe tambien un interface para c++

Sé que ODE está contruido en C++ internamente, pero tenia ententendido que su API es simplemente C.

CitarQUOTE
si el objeto va muy rápido, atraviesa la malla sin detectar colisión alguna

Debe ser porque usas un StepSize muy grande. En tu funcion de actualizacion deberias repetir dWorldStep(m_OdeWorldID, fStepSize); las veces que quieras que se ejecute la fisica (yo lo tengo puesto a 60FPS) y usar un fStepSize lo mas pequeño posible.

No creo que sea por el StepSize. Éste varía según cuanto tiempo hace que se calcularon las físicas en el fotograma anterior. En la demo que estoy probando, me va a 250 FPS, y por tanto las físicas se ejecutan bastantes veces (250 por segundo) con un step pequeño (entre 10 y 15 unidades de tiempo (en mi caso milisegundos)). En una demo que usa ODE el step size estaba fijado a 50, que es mucho mayor, de lo que yo uso.

Creo haber leído por ahí que el problema es que ODE no realiza comprobación de colisiones teniendo en cuenta la velocidad, sino simplemente comprueba en cada frame si el objeto colisiona o no contra otro. Por lo tanto, cuando un objeto se mueve muy rápido, pue pasar que no colisione con la geometría. No estoy seguro de esto, corregidme si me equivoco o si hay alguna manera de solucionar esto.


He coneguido resolver parcialmente el problema de mi primer post: los objetos no detectaban bien las colisiones con el trimesh porque no especificaba los vértices en el orden correcto (pero es que tampoco te dice en ningún sitio cual es el orden correcto, menos mal que se me ha ocurrido probar....). De todas maneras sigue estando el problema de las colisiones a gran velocidad.

Otra pregunta para los que controlen de ODE: para acelerar las colisiones con el quadtree o el hash table que incorpora ODE, ¿tengo que dividir toda la malla del mundo en muchos pequeños trimeshes y pasarselos a ODE como muchos objetos?¿o puedo pasarle a ODE toda la malla como un único objeto y esperar a que descarte los triángulos lejanos que no vayan a colisionar con nada?

ethernet

 He estado mirando la pagina de ODE y la verdad la documentacion que da es un poco durilla, supongo q habra por ahi algun tutorial mas clarificador :).
Por otro lado hoy en www.codepixel.com se ha publicado una noticia (http://www.codepixel.com/modules.php?op=modload&name=News&file=article&sid=2424&mode=thread&order=0&thold=0)  con unos links a ciertas cosas relacionadas con fisica, estan bastante interesantes:)

no pongo el link directo asi visitais codepixel, por si alguno no la conoce, codepixel rocks

seryu

 tambien existe el
http://physicsengine.com/

del qe he oido hablar bien (en foros indie anglosajones)







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.