Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





raylib - Librería en C para APRENDER programación de videojuegos

Iniciado por raysan, 19 de Diciembre de 2013, 08:02:10 PM

« anterior - próximo »

raysan

Hola,

Estos últimos meses he estado desarrollando una pequeña librería en C para enseñar programación de videojuegos y quería presentarla, por si a alguien le puede interesar.

Soy profesor de desarrollo de videojuegos y el año pasado tuve que dar clases a alumnos con alto perfil artistico y que nunca habían escrito una linea de código; empecé con el lenguage C. Estuve buscando una librería gráfica sencillita en C pero ninguna era lo suficientemente simple para mi gusto (Allegro, SDL,...). Finalmente utilizamos una version retocada de BGI (graphics.h). Los resultados fueron muy buenos (Pong, Arkanoid...) pero la librería no me termino de gustar (nomenclatura de funciones, organización, render por software...). El caso es que en los últimos meses he creado una pequeña librería en C para enseñar desarrollo de videojuegos: raylib (www.raylib.com).

La librería funciona con OpenGL 1.1, usa nomenclatura C#/XNA (los alumnos usan este framework cuando pasamos a POO) y es bastante sencilla de utilizar. Este año mis alumnos la han estado utilizando y los resultados estan siendo impresionantes. En apenas 24h de clase, alumnos que nunca habían programado han sido capaces de aprender unas bases de C y programarme varios juegos sencillos: Pong, Snake... Incluso uno de ellos me ha programado un Tetris!  8o

La librería es totalmente libre (incluso para fines comerciales...  :P) y de código abierto.

Si alguno le echa un vistazo, agradecería vuestra opinión!

Un saludo,

Ray

Gallo

Gracias, muy buen trabajo, le daré un vistazo para generarla en mac osx. Utilizar OpenGL 1.1 es por un motivo didáctico a la hora de explicar la librería? Aún siendo así creo que vale la pena utilizar vertex buffers y un shader para pintar ya que es la forma mas estandarizada actualmente y tan solo requiere OpenGL 2.1, en cualquier versión posterior la técnica sigue siendo prácticamente la misma y en WebGL también, el inmediate mode del 1.1 está muy deprecated a estas alturas.

raysan

Hola Gallo, gracias por tu respuesta.

Escogí OpenGL 1.1 por su sencillez e immediatez a la hora de hacer las cosas, también me parece mucho más claro e intuitivo a nivel didactico y teniendo en cuenta el uso que se le va a dar a la librería, es más que suficiente (y eso que he realizado algunas pruebas de stress y da para bastante...).

Otras materias que imparto son WebGL y programación para PSVita con PSM (desarrollamos un pequeño engine para un juego tipo Doom) y mi experiencia ha sido que a los alumnos les cuesta horrores entender bién la pipeline gráfica.

De momento la libreria cumple su finalidad educativa muy bien (la mayoría de los alumnos nunca veran el código fuente) pero tampoco descarto actualizarla a una version más reciente de OpenGL... o tal vez a WebGL...  ;)

kaito

Cita de: raysan en 19 de Diciembre de 2013, 08:02:10 PMSoy profesor de desarrollo de videojuegos y el año pasado tuve que dar clases a alumnos con alto perfil artistico y que nunca habían escrito una linea de código;

Lo primero que enseñan en programación, antes de escribir una sola línea de código, es la creación y desarrollo del "diagrama de flujo" del programa: http://es.wikipedia.org/wiki/Diagrama_de_flujo

Realmente, es la "capacidad" que se necesita para programar. Plasmar las ideas del juego en un diagrama de flujo.

A continuación, es necesario un conocimiento mínimo de matemáticas.

Y después, y por último, un conocimiento mínimo de programación en algún lenguaje dentro de la lista de motores de juego y librerías que existen: https://www.google.es/webhp?hl=es&tab=ww#hl=es&q=free%20game%20libraries

¿Qué lenguaje es mejor? C, C#, javascript, python, ...  Creo que es una pregunta obsoleta viendo los IDE que desarrollan la programación directamente del diagrama de flujo.

-REDKIT: http://www.youtube.com/watch?v=wbmQ6xNxjgA
-uScript(Unity): http://www.youtube.com/watch?v=JxY9hYjF3HE
-Alice 3: http://www.youtube.com/watch?v=T3-7YrN3lpo
-Synapse: https://www.assetstore.unity3d.com/#/content/11701
-Antares Universe(VIZIO): https://www.assetstore.unity3d.com/#/content/495

raysan


raysan

Hola a todos,

Rescato este post para anunciar una nueva versión de la libreria: raylib 1.1 http://www.raylib.com/

Esta nueva versión a supuesto un completo rediseño interno de la libreria para soportar OpenGL 3.3+ y OpenGL ES 2.0, todo ello manteniendo una sintaxis prácticamente idéntica al modo immediato de OpenGL. Para ello he creado un módulo llamado rlgl (rlgl.h/rlgl.c) que "traduce" funciones del tipo: rlVertex3f(), rlBegin(), rlColor4ub(), según la version seleccionada de OpenGL; es decir, permite programar usando el estilo del modo immediato pero internamente utiliza VAOs y shaders. Todo ello es completamente opaco para el usuario básico de raylib (aunque el código es abierto :P).

La utilidad de todo esto es que ahora es posible portar raylib a cualquier plataforma que soporte OpenGL ES 2.0.

Algunos otros añadidos importantes son el soporte de ficheros OGG con streaming de audio y el soporte de texturas DDS (comprimidas o no) con generación automática de mipmaps.

Un saludo!  :)

Ray

raysan

Hola de nuevo!

Me ha escrito gente que ha tenido problemas a la hora de configurar el entorno de trabajo para raylib. La configuración es bastante parecida a la de cualquier otra librería para programar juegos pero entiendo que mucha gente que empieza en este mundillo le puede resultar complicado (o simplemente no quiere perder el tiempo configurando un entorno para realizar algunas pruebas).

Por todo ello, he creado un instalador para raylib. El instalador contiene el compilador MinGW ya configurado para utilizar raylib y también incluye una versión del Notepad++ preconfigurada con autocompletado para las funciones de raylib. Es tan facil como ejecutar el instalador, siguiente, siguiente, finalizar y todo el entorno de trabajo ya estará preparado para funcionar. Todo el paquete se instala en C:\raylib.

Podeis descargaros el instalador desde: http://www.raylib.com/

Si alguno lo prueba y encuentra algún fallo, hacedmelo saber y lo corregiré.

Un saludo,

Ray

raysan

Hola de nuevo!

Tras varios meses de duro trabajo, he publicado una nueva version de raylib. Entre las muchas novedades que trae, la más destacable es el soporte para dispositivos Android y para Raspberry Pi. También se incluyen nuevos ejemplos de código y una serie de templates para empezar a programar tus juegos (con gestion de screens y demás).

De nuevo, el instalador incluye la libreria, el compilador MinGW y una versión de Notepad++ preconfigurada para raylib. Se instala en C:\raylib y es completamente portable.

La podeis descargar desde: http://www.raylib.com/
o desde GitHub: https://github.com/raysan5/raylib

Si alguno lo prueba y encuentra algún fallo, hacedmelo saber y lo corregiré.

Un saludo,

Ray

•Parra

Increible, cuanto tiempo te ha costado desarrollarlo?

Me parece increible la cantidad de cosas que le has añadido en poco tiempo.

Revisando el codigo he visto que el diseño es muy simple, aunque supongo que lo habrás hecho así con el fin de que sea facil de entender para gente inexperta.

De todos modos es un buen trabajo, mis felicitaciones.

raysan


Hola Parra! Muchas gracias por tu respuesta, siempre se agradece que alguien se interese por tu trabajo!

raylib lleva en desarrollo desde mitades de Agosto del 2013, un poco más de un año, pero he invertido bastante tiempo en su desarrollo, no puedo darte una cifra exacta pero aproximadamente unas 1000 horas de trabajo.

La he desarrollado en mi tiempo libre y la uso en mis clases de programación. La he estado probando con unos 80 alumnos y gracias a su feedback, ha ido creciendo y mejorando durante todo este año.

Efectivamente, el diseño es muy simple y es muy facil de utilizar (la mayoría de mis alumnos no han programado en su vida y tienen perfil artístico). Para su desarrollo me he inspirado sobre todo en XNA pero también he revisado otras librerías como BGI, Allegro, SDL, SFML, Processing, Quake 3 engine, etc. Gran parte del trabajo han sido tareas de investigación y diseño.

De nuevo, muchas gracias por tu interés!  :)

•Parra

Excelente, mis felicitaciones.

Ya me gustaría que a mi en clase me enseñasen eso (aunque ahora ya seria inutil...).

Si necesitases feedback o sugerencias sobre el proyecto, solo avisa! Como por ejemplo implementar soporte basico para networking (que puede ser muy util para cualquier tipo de mmo o similar).

Tienes alguna parte publica, como un blog o foro, relacionado con tus clases o grupos de alumnos? Solo para buscar gente con quien asociarme, discutir o hablar sobre desarrollo, etc.

raysan


Con raylib siempre puedes aprender más que su simple utilización para pequeños test. La libreria esta pensada de tal modo que ella misma sea una herramienta de formación; es decir, la estructura en modulos es sencilla de enteder y el código fuente contiene un monton de comentarios i anotaciones para poder entenderlo todo.

Cualquier tipo de feedback siempre es bien recibido, como te comentaba, la librería ha evolucionado gracias al feedback de mis alumnos. Un soporte básico para networking es una gran idea, aunque ahora mismo necesitaría bastante investigación en ese campo...

No tengo ni blog ni foro y se que debería pero no tengo tiempo para ocuparme de todo... Si que tengo twitter y raylib tiene página de facebook donde se muestran algunos trabajos de alumnos pero me faltan muchas cosas por subir...


raysan

Hola de nuevo!

He publicado una nueva version de raylib! Esta nueva version añade algunas funciones y corrige algunos bugs pero su mayor añadido es el soporte para web! Es decir, ahora puedes compilar tus proyectos en C con raylib directamente para web (html5).

Podeis ver un ejemplo de ello junto con las principales funcionalidades de raylib aqui: http://www.raylib.com/raylib_demo.html

Podeis descargar raylib desde: http://www.raylib.com/
o desde GitHub: https://github.com/raysan5/raylib

Ahora ya no hay escusa para aprender a programar videojuegos!

Un saludo,

Ray

Gallo

Feliz año nevo y enhorabuena por esta nueva versión. Me parece muy interesante esta nueva version con soporte para html5, en su dia tambien trabajé con emscripten, cuidado con usar VAOs al tirar de emscripten, ya que no forman parte del standar de webgl 1 y algunos navegadores no lo soportan ni como extension, aunque hay que reconocer que son mas comodos que usar solo vbo y andar arrastrando los bindeos.

Por cierto, lo dije en su dia tengo pendiente probarla en mac, si veo que puedo ayudarte con la version de mac os x, las directrices cuales serian? Te gustaria que se hiciera todo con el makefile imagino, opcion de 32 y 64 bits? Tema iOS?

raysan

Hola Gallo! Feliz año nuevo para ti tambien! :D

Ya me encontre con la falta de VAOs al portar raylib a RaspberryPi; raylib detecta automaticamente si estan disponibles y si no lo estan hace fallback al uso de VBOs. Con emscripten fuerzo el uso de VBOs, de este modo compila a WebGL nativo, sin ninguna capa de emulacion, obteniendo el máximo rendimiento posible. He hecho varias mejoras en raylib en ese sentido...

Ya hace tiempo que estuve probando raylib en OSX con un amigo, funciona muy bien pero hay algunas cosillas que se tienen que tener en cuenta, como las rutas de carga de recursos (texturas, sonidos...); tengo un pull-request en GitHub con una primera version de la pipeline para OSX pero tiene algunos conflictos y todavía no he hecho el merge... igual me pongo esta noche... :P De todos modos, toda ayuda y colaboración es bienvenida! Si, me gustaría que todo pudiese funcionar con un único makefile, simplemente definiendo la 'platform'... pero aun no tengo claro como hacerlo... De momento raylib compila a 32bit, opción para 64bit estaría genial!  ;)

Tema iOS? Lo estuve mirando en su día pero a diferencia de Android, requiere una parte de código en Objective-C y no me parecio sencillo adaptar raylib para compilar en iOS... supongo que también por falta de tiempo...






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.