Bennu Game Development

Foros en Español => Sugerencias => Topic started by: JaViS on October 25, 2007, 10:47:38 PM

Title: Motor de gravedad
Post by: JaViS on October 25, 2007, 10:47:38 PM
Estuve jugando un rato a http://www.kloonigames.com/blog/games/crayon/ y se me ocurrio que estaria buenisimo que bennu trajera un motor de gravedad incluido por defecto ^_^

Offtopic:
¿Quien seria el enfermo que se le ocurriria usar esto?
Title: Re: Motor de gravedad
Post by: SplinterGU on October 25, 2007, 10:49:15 PM
No se en que consistiria, pero no suena mala la idea.
Title: Re: Motor de gravedad
Post by: syous on October 26, 2007, 08:40:19 AM
si seria interesante una libreria de fisicas con lo cual ya se tine gravedad y lo que quieras
Title: Re: Motor de gravedad
Post by: osk on October 26, 2007, 03:27:19 PM
Ei!, es buenísimo el Crayon Physics ese!!.
He visto que está hecho con SDL y el motor de gravedad es uno libre que se llama Box2D (http://www.box2d.org) el cual está hecho con C++ .

...y digo yo, sin saber nada de nada...¿hacer un binding para Bennu de una librería ya hecha en C++ -aunque no C- costaría mucho? ¿O más valdría crear la librería pensando propiamente en Bennu? Lo digo porque eso de reutilizar código e ideas puede ser buena idea...
Title: Re: Motor de gravedad
Post by: HaCkZJuaNN on October 26, 2007, 04:10:18 PM
Quote from: SplinterGU on October 25, 2007, 10:49:15 PM
No se en que consistiria, pero no suena mala la idea.

hombre, pues supongo que se podría hacer diciendo dentro del proceso algo asi: declare_corp(float masa, float radio)

y luego por debajo harías todos los calculos de atracción gravitatoria entre todos los cuerpos que podrías obtener con get_vel_x get_vel_y, etc...

aunque esto sería para sistemas gravitatorios de varios cuerpos, pero si lo que quieres es que las cosas "caigan", es mucho más sencillo que todo eso. Lo único que tienes que hacer es poner: apply_gravity(int masa), y eso haría que la y fuera cambiando en función de la gravedad, con todos los cálculos por debajo, y luego también podrías incluir otras funciones y variables como gravity_angle(para hacer que no solo caigan hacia abajo, sino también hacia los lados), gravity_force(para poner una gravedad más fuerte o más débil), etc...

Así divagando también se me ocurre que si pones eso también podrías poner algo para que los objetos que "caen", "choquen" al llegar a determinado punto, y que dependiendo de la elasticidad del objeto choque más o menos fuerte. Todo es cuestión del realismo y el detalle que quieras darle.

Como ya sabéis, las matemáticas y la física me gustan mucho así que si splinter decides hacerlo, me ofrezco para hacerte un "modelo" en bennu que luego tú puedas adaptar para incluirlo en el código fuente de bennu, si te parece bien. Además, ya he hecho cosas parecidas de simulación de física relativamente simple en otros lenguajes.
Title: Re: Motor de gravedad
Post by: SplinterGU on October 26, 2007, 07:15:50 PM
Si, ya me di cuenta que estas divagando... :D
Title: Re: Motor de gravedad
Post by: Segata on October 26, 2007, 10:16:22 PM
Hombre, lo divertido de estas cosas es programarlas uno mismo, de todas formas si viene ya hecho más de uno ahorraría algo de tiempo.
Title: Re: Motor de gravedad
Post by: SplinterGU on October 26, 2007, 10:31:14 PM
Por que no aprovechamos este thread para que entre todos los interesador diseñen que seria el motor de gravedad? pero no divagen, den algo tangible... digamos:

- Para que sirve?
- Caracteristicas?
- Requerimientos (datos de entrada necesarios)
- Necesidades
- Logica
- Caso practico (Teorico, no hace falta ejemplos en source, sino en palabras)

y luego, en base a todo lo analizado:

- Variables (si corresponde), funciones, etc...
Title: Re: Motor de gravedad
Post by: HaCkZJuaNN on October 27, 2007, 06:31:09 AM
Entonces la primera pregunta sería, lo que queremos es que los objetos caigan o que se atraigan unos a otros?
Title: Re: Motor de gravedad
Post by: SplinterGU on October 27, 2007, 12:58:15 PM
no se, investiguen un poco...
Title: Re: Motor de gravedad
Post by: Kel on October 27, 2007, 02:50:20 PM
la verdad es que es un tema interesante y para cosas sencillas creo que hasta se podria implementar algo basico. Yo tambien estudio fisica como hobby a ratos(entre tantos hobbys) y estuve a punto de hacer algo para fenix y al final no lo hice por otros menesteres.

Lo que es un motor basico, con gravedad, velocidad, angulos, aceleraciones, movimientos circulares realmente no supondria mucho esfuerzo en cuanto a cpu y ni tan siquiera requiere de cálculo mas allá del algebra y trigonometria, coordenadas cartesianas y polares, etc, y el tema de angulos y distancias ya lo tenemos disponible en el lenguaje.

Ya si nos metemos en algo mas avanzado saliendo de lo normal, entonces ya habria que tirar de simulacion numérica como hacen ODE o Newton,(bueno mas bien éstos usan un sistema por impulsos pero eso es bastante complicado para un motor simple). Yo voto por algo simple, fisica muy basica, y a correr  ;D
Title: Re: Motor de gravedad
Post by: SplinterGU on October 27, 2007, 03:42:05 PM
Ok, pero que supondria algo simple y algo complejo?
Hagan de cuenta que no sabemos nada del tema y que lo que leemos es todo chino... de que forma plantearian explicar esto como una necesidad, argumentar y demostrar que seria util o necesario...
Luego, con todo un diseño hacer un modulo de esto no seria complicado.
Ya que muchos tienen ganas de colabrar en el proyecto pero no saben como, creo que esta seria una buena forma de hacerlo.
Traten de investigar un poco de que tratan estas cosas, o si hay engines ya hechos opensource, etc. No nos limitemos en lo que creemos deberia ser... busquemos lo que ya hay, y veamos que de todas las ideas, pueden ser utiles para hacer algo aprovechable para Bennu y que cosas no...
Title: Re: Motor de gravedad
Post by: HaCkZJuaNN on October 28, 2007, 10:58:16 AM
La cuestión es que no sería necesario tirar de otro motor. Para lo que va a usar la mayoría de la gente, se puede programar solamente a base de fórmulas(como nos enseñaban en el colegio). Yo hice un programa que simulaba atracciones entre muchos cuerpos y funcionaba muy bien y solamente usaba fórmulas, y no pasaba de las 500 líneas. Para hacer un motor que simplemente haga que los objetos caigan hacia el suelo... más fácil todavía. La cuestión es saber qué es lo que quiere la gente.
Title: Re: Motor de gravedad
Post by: SplinterGU on October 28, 2007, 12:47:55 PM
Lo que sea... la propuesta?
Title: Re: Motor de gravedad
Post by: JaViS on October 28, 2007, 02:30:43 PM
Yo tenia en mente que se importen las funciones hechas en una libreria externa como la que usa el juego q puse de ejemplo. Creo que eso seria mucho mas productivo que hacer todo de cero.

Lo que habria q pensar, es como unir todo eso al lenguaje. Si van a haber nuevas propiedades para los procesos y como van a ser las funciones.
Title: Re: Motor de gravedad
Post by: SplinterGU on October 28, 2007, 04:50:23 PM
A mi tambien me parece que lo ideal es usar alto ya hecho...
Lo de unir no hay problema... eso es simple... pero se necesita todo un analisis y un diseño de que seria cada funcion, etc...
Claro, bueno, todo eso de las propiedades, funciones, etc... es lo que hace falta...
Adelante JaViS, ya que fuiste el culpable de la idea, da el primer paso...

A ver... yo te tiro las primeras preguntas...

- Para que me sirve exactamente el motor? por ejemplo?
- Que hace (o haria/aportaria) exactamente?

- Se necesitan variables extra a las existentes? Cuales?
- De no ser necesarias nuevas, cuales de las existentes estarian involucradas?
- Funciones, que funciones serian...
- Dependerian de algun otro modulo o funcionalidades existentes? (graficas, trigonometicas,...)?
Title: Re: Motor de gravedad
Post by: syous on October 29, 2007, 03:33:21 PM
 ;) eso mas o menos es trigonometria, geometria, etc, etc
su utilidad inmensa no digo una fisica tipo motor havok  de half life 2
pero si una fisica tipo libreria newton .
que es muy util para simular viento, lluvia,, saltos, etc de forma realista
Title: Re: Motor de gravedad
Post by: JaViS on October 29, 2007, 06:23:24 PM
QuoteAdelante JaViS, ya que fuiste el culpable de la idea, da el primer paso...
maldicion!! XD

bueno, voy a estudiar la lib en mi casa despues del laburo, a ver que se puede sacar
Title: Re: Motor de gravedad
Post by: Kel on November 01, 2007, 03:09:32 PM
Quote from: syous on October 29, 2007, 03:33:21 PM
su utilidad inmensa no digo una fisica tipo motor havok  de half life 2
pero si una fisica tipo libreria newton .
que es muy util para simular viento, lluvia,, saltos, etc de forma realista

hmm.. solo comentar, que el havok en sí lo unico que lleva es un integrador/simulador numerico, y esto tambien lo lleva el ode o el bullet, por tanto es similar a lo que ya tienes en opensource. 

Pero puedo decir que el Newton en si es la mejor libreria que existe porque respeta las ecuaciones de newton con bastante precision no como otros motores que son meras aproximaciones, segun el autor de la lib newton, el tio intentó hacerlo lo más fiel posible a la física de newton que se ve en los libros y no meras hack-aproximaciones como otros motores. Mucha gente que usa Ode en sus juegos se ha quejado de su inestabilidad.

Ups, edito: se me olvidaba comentar si quereis ver como funciona un motor en condiciones en el blender viene integrado el Bullet, y se puede ver en tiempo real pulsando la tecla P con alguna demo que os bajeis para el game engine de blender.

considero como mejores alternativas a Ode, el newton y el bullet engine.
aunque si alguien esta mas puesto en el tema que me corrija puesto que hace tiempo que no miro el tema de motores :D
Title: Re: Motor de gravedad
Post by: syous on November 02, 2007, 09:05:14 AM
 ;Dcierto seria muuuuuuuuuuuuuuuuyyyyyyyyyyyyyyyyy util por lo menos a mi que estoy con los efectos climaticos
Title: Re: Motor de gravedad
Post by: Kel on November 02, 2007, 02:37:22 PM
nose si servira de algo, pero lo mas conveniente a mi modo de ver sería usar una libreria, Ode y bullet creo que son opensource, Newton no estoy seguro.

En el caso de que algun valiente (y digo valiente porque no es tan sencillo) se atreviera a meterle mano a algo parecido a un pequeño motor de fisica para usarlo en bennu o fenix tendria dos opciones para hacerlo:

1-Usando las formulas de toda la vida de la fisica de instituto, algebra y trigonometria basicamente para hacer un motor con la fisica basica.... Seria algo simplón y habria gravedad, friccion, proyectiles, movimientos con aceleración, muelles simples y oscilaciones simples, impulsos y colisiones elasticas e inelasticas y torques(balances de fuerzas entre objetos como una balanza)... y poco mas(que no es poco).

2-Hacer un sistema de fisica en condiciones como Ode o newton. Aqui ya seria todo calculado numericamente, usando ecuaciones diferenciales y un integrador euler o RK. tendria todo lo anterior y la dinamica seria mas amplia. no es que sea más dificil que lo anterior, simplemente requiere mas tiempo porque es un poco mas avanzado.

solo lo pongo como nota de que hacer algo asi requiere de por lo menos unos pocos de meses y es una tarea titánica. Actualmente estoy estudiando la parte 2 de lo anteriormente escrito y es tan complicado que tengo que usar un programa tipo matlab para algunas soluciones.

Así que lo dicho, lo mejor usar un wrapper o usar una DLL de alguna lib como bullet o Ode... bueno al menos espero que a alguien le haya servido la información, saludos.
Title: Re: Motor de gravedad
Post by: SplinterGU on November 02, 2007, 04:53:28 PM
La libreria tiene que ser rapida...
Title: Re: Motor de gravedad
Post by: laghengar on May 18, 2008, 09:45:19 PM
Propongo estudiar a Arquímedes, es el padre de nuestras matemáticas y física, de hecho sus problemas era una mezcla de ambas ciencias. Sus textos no son tan complicados (recordad la antigüedad), yo creo que podeis entenderle perfectamente y llevarlo a la programación.
Title: Re: Motor de gravedad
Post by: DCelso on May 19, 2008, 08:00:56 AM
Buenas,
veo el tema este muy interesante, pero también bastante complicado para el tema de juegos 2d. ( En 3D, sería complicadillo pero serían básicamente fórmulas ya que es un entorno mas parecido al real)
El motor de gravedad depedería mucho del tipo de juego a implementar.

Por ejemplo:
En un juego de plataformas es simplemente gravedad de atracción terrestre, para saltos y caídas teniendo una línea como referente de tierra firme (osea donde dejaría de caer el objeto).
Para este tipo de juegos necesitariamos definir en los proceso la masa del objeto y luego en el proceso general tanto la aceleración gravitatoria (9,8) como el punto central de atraccion algo como g_x y g_y.
Se tendría que odviar el impacto contra el suelo porque crearía quizas deformaciones en la línea de tierra complicando los mapas de durezas. Aunque si se implementara esto daría mucho realismo a estos tipos de uego :D.

En un juego de beat em up es complicaría un poco porque ya la línea de tierra firme no es tal, en el caso del salto se debería guardar antes de saltar la distancia sobre una línea base del personaje para luego usarla como referente de aterrizaje.

En un juego shot em up, quizás interese la atracción de cuerpos esféricos sobre las naves.

En juegos de carreras, ya no sería tan necesaria pero  quizas interesasen otras aceleraciones como las centrífugas y centrípedas.
 
Creo que también se necesitaría en el proceso principal definir otra variable global como tipo de juego o algo así.
Title: Re: Motor de gravedad
Post by: laghengar on May 19, 2008, 10:06:14 PM
pero si podeis hacer todo eso con unas pocas funciones. De hecho para la gravedad, creo que solo hace falta una estructura y una función.

Qué puñetas, para la gravedad con una asignación aritmética vale, dy+=10; y santas pascuas.
Title: Re: Motor de gravedad
Post by: SplinterGU on May 19, 2008, 10:16:50 PM
Supongo que no es tan simple como 1 formula, supongo que para hacerlo realista deberia tenerse en cuenta cosas como posicion vertical del objeto, nivel del mar, resistencia del aire, velocidad/orientacion del viento, etc...
Creo que en un buen motor de gravedad, hay muchas variables en juego, todo depende de lo que se quiera hacer, pero un motor de gravedad deberia soportar la mayor cantidad de condiciones posibles, lo bueno de este post seria poder analizar y plantear cuales son esas variables en juego y que funciones o que comportamientos deberia brindar el motor.
No se trata de leer arquimides o platon o pluton o mercurio o venus... :P
Title: Re: Motor de gravedad
Post by: laghengar on May 20, 2008, 09:40:52 PM
Bueno yo mencioné a Arquímedes porque pensé que la gente estaba pensando en calcular los centros de gravedad, y éste tenía métodos de cálculo sencillos usando la geometría.

Si se quiere hacer un foro de todas esas variables que estais comentando ahí no me voy a meter, nunca he llegado a profundizar tanto. Solo puedo hablar de centro de gravedad, empujes, pares de fuerza, esos datos de presión y no se que del mar, ni idea.
Title: Re: Motor de gravedad
Post by: SplinterGU on May 20, 2008, 09:54:38 PM
jejeje, con lo del nivel del mar, me refiero a que segun la altura donde uno se encuentra estando en posicion de reposo (altura inicial) la fuerza de gravedad difiere con respecto al nivel del mar...
si bien la mayoria de los casos no requieren algo completo, un motor de gravedad debe ser algo completo...
Title: Re: Motor de gravedad
Post by: l1nk3rn3l on May 20, 2008, 10:11:12 PM
es interesante el tema , hay un motor 2d de fisica por ahi en la red

no recuerdo el nombre pero esta sobre graficos OpenGl

Title: Re: Motor de gravedad
Post by: SplinterGU on May 20, 2008, 10:24:06 PM
Si, seria bueno que entre los usuarios se dediquen a diseñar esto, yo realmente dudo que lo haga, pero muchos seguro tienen la necesidad de un motor de gravedad y muchos otros seguramente usaron alguno, con que todos colaboren un poquito podrian hacer un motor "made by Bennu's Users"...
Title: Re: Motor de gravedad
Post by: laghengar on May 21, 2008, 05:23:50 PM
Bueno aquí hay una ayuda con respecto al tema, http://es.wikipedia.org/wiki/Gravedad

Aunque sospecho que lo que también se quiere es el cálculo de colisiones de los objetos tal como se produce en el crayon. En este caso, esta esto:

http://es.wikipedia.org/wiki/Leyes_de_Newton

supongo que con esto se puede hacer un motor como el crayon de forma básica como mínimo.
Title: Re: Motor de gravedad
Post by: Danielo515 on September 20, 2008, 12:46:42 AM
Yo pienso que tiene que tener lo básico, tiros parabólicos y cosas así.
Una función podría ser, tiro_parabólico(x_inicial,y_inicial,x_final,y_final,fuerza); y el te calculara las posiciones, o te moviera el proceso si se lo pasas como ide siguiendo esa parábola. Es un ejemplo.

La gravedad, considerar lo que han dicho, la densidad de los cuerpos y esas cosas, para ver cuanto rebotan y como. No se, algo que sea rápido de usar y tengas resultados en un juego preferentemente de plataformas, yo creo que un beat_em_ump no necesita un motor físico.