Martes, 14 de junio de 2005
Os pedimos disculpas por el tiempo que llevamos sin postear nada. En estos últimos días, el nivel de trabajo en Cheesetea nos está desbordando con creces y apenas nos queda tiempo para prestar atención al blog.
Seguramente, continuaremos poniendo novedades a partir del próximo día 5 de julio, que será cuando Screaming Racers pase su primer control ante un tribunal de suficiencia investigadora.
Por el momento, aquí os dejamos un par de capturas para que veais el estado actual de desarrollo.


Nuevamente, comentaros que cualquier sugerencia, pregunta o comentario que queráis hacernos sobre el juego, siempre será bien recibida :).
Por: ronaldo | General | Comentarios (2) | Referencias (0)
Lunes, 09 de mayo de 2005
He empezado a añadir soporte para OpenGL en el motor. Debido a que inicialmente solo se habia pensado en soporte software, hay que hacer una ligera reestructuración en las clases CEngine y CRender.
A partir de ahora, CRender será una clase base estandar de la que se derivan otras dos: CRenderSoft y CRenderGL.
Se va a intentar hacer lo mas generico posible, por si decidieramos hacer una version DirectX en algun momento :O.
Además se tiene que modificar un poco la clase CObjeto. Se añadirá un identificador unico a cada objeto registrado en el motor. Este id se usará en la compatibilidad de OpenGL, al menos temporalmente. Por ahora la única solución que se me ocurre es crear una copia de todos los objetos del motor en formato OpenGL. Esta lista se mantiene en memoria. El motor sigue operando internamente en su propio formato, y cuando ha realizado el proceso de clipping y seleccionado los objetos a renderizar, se los pasa a CRenderGL, que actualiza los objetos equivalentes en formato GL y los renderiza.
Además no es mala idea que cada objeto tenga su propia id, por si el usuario que utilice el motor quiere darle alguna utilidad, referenciando a los objetos por su id.
También he cambiado algunas cosas en CEngine. Se ha añadido una función de cambio de resolución CambiarResolucion(ancho,alto,bpp), una funcion SwitchFullScreen() que alterna entre modo ventana y pantalla completa, y se esta teniendo en cuenta que se pueda cambiar el tipo de render soft/GL en cualquier momento, sin que haya que reiniciar el juego.
Por: Predator | Motor grafico | Comentarios (1) | Referencias (0)
Lunes, 09 de mayo de 2005
La inteligencia artificial de Screaming Racers comienza a dar sus primeros frutos. En los últimos experimentos realizados, ya hemos podido disfrutar observando a los primeros corredores que aprendían a dar vueltas a algunos circuitos simples :).
Las novedades en esta última entrega son las siguientes:
Por: ronaldo | I.A. | Comentarios (4) | Referencias (0)
Lunes, 02 de mayo de 2005
Por fin! Tras unas duras sesiones de implementación y depuración, ya pueden verse los primeros conductores capaces de tomar decisiones en función de las lecturas de los sensores, utilizando sus propias redes neuronales. 
Estos pequeños cerebritos, todavía aleatorios, ya empiezan a dar mucha luz sobre los posibles resultados del proyecto. En un experimento, realizado esta mañana sobre las 12:40h, con una población de tan sólo 60 individuos, ha aparecido uno que era capaz de interpretar bien sus sensores, detectando las paredes y siguiéndolas. Era fascinante ver como giraba en las curvas y como aceleraba y frenaba. Mucho más alucinante aún, es el hecho de saber que la red neuronal de este individuo es aún aleatoria, y no contiene neuronas en capa oculta. Esto significa, que la evolución de las redes neuronales puede dar lugar a individuos realmente espectaculares :).
Bien, dado este claro avance significativo, se produce un aumento en el número de versión, pasando de la 0.9.17m8.3b a la 0.10.0m8.3b. Los cambios realizados desde la última noticia son:
Circuito::GetNumRectas(). Ahora se utiliza Circuito::GetUltimaRecta() para evitar confusión.CVector2D::SignoProdVectorial() y utilizando este signo para distinguir cuando un vector está a la derecha o a la izquierda del otro (mediante la regla del sacacorchos ;))g_Constantes.bControlTeclado, y utilizar las teclas del cursor del teclado numérico (2, 4, 6 y 8).CPunto2D::DistanciaARecta.RedNeuronal::Actualizar acepta como entrada un cont TSensores& en lugar de un vector<double>. De esta forma, es mucho más práctico y simple de usar.CGenoma, y que hacía que los genes no se creasen bien, puesto que faltaba utilizar un new en lugar de un constructor estático (lo que hacía que el Genoma así construido se autodestruyera al cerrar el ámbito local).CGenoma consistía en el descuido de no haber incluido la creación de una neurona de entrada para el sesgo.nRecta >= Circuito.GetUltimaRecta(). Una vez sustituido el >= por >, se ha solucionado el problema.Por: ronaldo | I.A. | Comentarios (1) | Referencias (0)
Domingo, 01 de mayo de 2005
Después de revisar el código y depurar adecuadamente todo, ya funcionan correctamente los sensores de visión de los coches! :) En esta anotación se pueden ver las primeras imágenes de los sensores en funcionamiento.
El principal fallo que impedía el funcionamiento de los sensores fue un despiste mío. Como comenté en el artículo anterior, realizaba la traslación de las rectas de los sensores, pero esto no es suficiente, ya que las rectas deben ser rotadas también. Así pues, para corregir este fallo, lo primero que he hecho ha sido implementar el método CRectaS2D::Girar, con el que ahora es posible girar una recta un ángulo determinado. Seguidamente, he cambiado el método CSensor::Trasladar por el método CSensor::RotarYTrasladar que hace ambas cosas en un solo paso. De esta forma, las rectas de visión que representan los sensores ya ocupan su lugar adecuado en el mundo, y las intersecciones con el resto de objetos funcionan perfectamente.

También encontré un segundo fallo, más simple pero igualmente complicado de detectar. Cuando calculaba el porcentaje normalizado de recta de visión que hay desde el comienzo del sensor hasta la intersección con el objeto detectado, lo hacía al revés; en lugar de dividir la recta parcial entre la recta total, dividia recta total entre recta parcial. Así pues, los resultados eran siempre >= 1, en lugar de <= 1, que es lo que esperaba recibir el sensor.
Ahora mismo, los sensores funcionan perfectamente. Lo siguiente que resta hacer con ellos, es crear un algoritmo para que detecten las rectas anteriores y siguientes a la recta por la que circula el coche en un instante dado. Toca pensar... :P
Por: ronaldo | General | Comentarios (2) | Referencias (0)
Noticias de Screaming Racers, el primer proyecto de videojuego de Cheesetea.
Diseñado por Studio.st
Online gracias a Bitacoras.com