Home » Ejemplos

Ejemplos

Esta página contiene diferentes ejemplos de usos, pruebas y demás código que se puede descargar con el fin de comprobar cómo funciona esta biblioteca de desarrollo y ver el código fuente que la emplea.

Algún concepto previo …

Antes de empezar me gustaría definir algunos conceptos:

AGTR
Aplicación Gráfica en Tiempo Real.
Modelo Continuo Acoplado
Típico modelo utilizado para el desarrollo de una AGTR (mono-hilo).
Modelo Discreto Desacoplado
Modelo propuesto para el desarrollo de una AGTR (mono-hilo).
RT-DESK
Núcleo de simulación discreta sincronizado con el tiempo real para gestionar una AGTR implementada con el Modelo Discreto.
Render Gráfico (Rnd)
Tiempo de la aplicación utilizado en el dibujo de una escena o frame.
Update (Upd)
Tiempo de la aplicación utilizado para evolucionear cada aspecto de cada objeto de esta.
Idle (Idl)
Tiempo de la aplicación “no utilizado o sobrante”. Tiempo que simplemente la aplicación está esperando a que se ejecute en Rnd o el Upd.

La intención principal de todas las demos aquí presentadas es mostrar las virtudes del Modelo Discreto frente al Modelo Continuo. El Modelo Continuo sufre un acoplamiento entre el Rnd y el Upd que puede provocar un exceso de renderizados (más de 60 fps) y el submuestreo o sobremuestreo de diferentes aspectos de cada objeto de la aplicación. Hay ocasiones en las que un objeto debe actualizar su posición, a lo mejor, cada 0.001 ms (ej. Una bala) y otro objeto solo necesita actualizarse, a lo mejor, cada 40 ms (ej. Objeto lanzado).

LimModCont-e1389627135494
El Modo Discreto independiza totalmente el periodo de ejecución de cualquier aspecto de cualquier objeto de la aplicación dentro del mismo hilo de ejecución, lo cual le permite optimizar el uso de CPU. Además, garantiza una alta precisión en la evolución del mundo virtual debido a que el Modo Discreto gestiona eventos discretos en tiempo de simulación.

Cont_vs_Dis-300x209
NOTA: Para evitar el exceso de renderizados las tarjetas gráficas utilizan el V-Sync, de manera que se dibuja la escena en un hilo de ejecución independiente sincronizado con la señal V-Sync. Pero con esto solo se consigue desacoplar el render gráfico, el resto de aspectos de cada uno de los objetos siguen estando acoplados. Pero en estas demos, para poder apreciar mejor el desacoplamiento del Modo Discreto se recomienda desactivar la sincronización vertical de la tarjeta gráfica V-Sync.

Teteras

Esta demo muestra el caso de hasta 25 teteras dando vueltas en pantalla y una luz que gira alrededor de ellas. Cada tetera está representada por unos 3000 triángulos. La idea consiste en modificar el comportamiento de algún aspecto de la aplicación en tiempo de ejecución y poder observar el comportamiento acoplado del Modo Continuo y el comportamiento desacoplado del Modo Discreto.

ImgDemoTeteras-150x150

Game of Life

Esta demo implementa una matriz del juego de la vida. Esta matriz contiene 25600 celdas (160 x 160) y esta implementada en Modo Continuo y en Modo Discreto. Con esta demo se pretende mostrar la alta precisión que ofrece el Modo Discreto frente al Modo Continuo tanto en el instante como en el orden de ejecución de cada una de las celdas.

La idea es mostrar la capacidad que tiene RT-DESK para poder repartir la potencia de calculo de forma muy eficiente entre las distintas células de un Autómata Celular, garantizando una ejecución precisa y sin errores en el instante de ejecución de cada una de sus células.

ImgDemoGL-150x150

Colliding Balls

Esta demo consiste en una caja que contiene bolas y estas bolas rebotan entre si sin salirse de los limites de la caja. Para no perder ninguna colisión, cada vez que una bola recorre una distancia equivalente a su diámetro, ha de comprobar posibles colisiones. Esto implica que la frecuencia con la que cada bola ejecuta su método de update depende de la velocidad que lleve. Cada bola se inicia con una posición y velocidad. La posición se va calculando mediante una simple ecuación en función del tiempo y la velocidad. La velocidad va disminuyendo cada vez que la bola toca una pared de la caja.

Si se montan dos filas de bolas y las bolas de una fila van en sentido inverso a las bolas de la otra fila, lo que conseguimos son dos filas de bolas que ha de estar continuamente colisionando y rebotando entre si. La idea es mostrar como con el Modo Continuo una aplicación puede cometer errores de ejecución no predecibles mientras que el Modo Discreto garantiza siempre una correcta simulación.

ImgDemoBalls-150x150

Space Invaders

Esta demo es una interpretación del clásico de los videojuegos “Space Invaders”. El juego esta implementado en Modo Continuo y en Modo Discreto y ademas esta desarrollado en 3D, aunque también se puede jugar en 2D. La implementación del juego tiene un enfoque académico. Por ello no se utiliza ningún motor de física, se han implementado tres tipos diferentes de técnicas para la detección de colisiones y sus niveles son muy configurables desde archivos html.

El juego esta implementado de forma que todos sus objetos se actualizan (ejecutan su propio método update) en función de la velocidad que tienen en cada instante del juego. Es decir, la frecuencia de update de una bala es muy superior a la frecuencia de update de una nave. Se puede activar una modalidad del juego en la que las naves rompen la formación y rebotan entre ellas con diferentes velocidades.

Es muy interesante comprobar como el Modo Discreto siempre consigue una ejecución correcta frente al Modo Continuo que suele cometer errores de ejecución no predecibles y por los cuales no suele hacer una ejecución correcta de lo que se esperaba.

4_L1_dis_byFrame-150x150 4_L5_bounce_dis-150x150

Autor: Vicente Broseta Toribio (vibroto<at>doctor<dot>upv<dot>es)