Foros - Stratos

Stratos => Proyectos => Mensaje iniciado por: raysan en 19 de Diciembre de 2013, 08:02:10 PM

Título: raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 19 de Diciembre de 2013, 08:02:10 PM
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 (http://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
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: Gallo en 19 de Diciembre de 2013, 11:58:56 PM
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.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 20 de Diciembre de 2013, 11:28:55 AM
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...  ;)
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: kaito en 24 de Diciembre de 2013, 05:38:08 PM
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 (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 (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
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 25 de Diciembre de 2013, 04:19:29 PM
Hola kaito, muchas gracias por tu aportación.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 19 de Abril de 2014, 06:16:52 PM
Hola a todos,

Rescato este post para anunciar una nueva versión de la libreria: raylib 1.1 http://www.raylib.com/ (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
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 12 de Mayo de 2014, 12:30:30 PM
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/ (http://www.raylib.com/)

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

Un saludo,

Ray
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 28 de Septiembre de 2014, 08:07:34 PM
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
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: •Parra en 01 de Octubre de 2014, 03:06:10 AM
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.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 01 de Octubre de 2014, 08:48:47 PM

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!  :)
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: •Parra en 01 de Octubre de 2014, 09:25:54 PM
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.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 02 de Octubre de 2014, 11:20:03 AM

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...

Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 01 de Enero de 2015, 11:37:40 AM
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
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: Gallo en 01 de Enero de 2015, 07:42:05 PM
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?
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 01 de Enero de 2015, 09:02:49 PM
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...
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 03 de Septiembre de 2015, 12:35:07 PM
Hola a todos,

Rescato este viejo post para anunciar una nueva versión de raylib.

Tras 8 meses de trabajo, he publicado raylib v1.3. Sin duda es la mayor actualización de la librería desde su creación e incluye un montón de novedades:

- Soporte para Shaders: Aplicables a modelos 3d o a postprocesado, con una sencilla interfaz de uso. Además se incluye una pequeña colección de shaders de postprocesado listos para usar (tanto en version GLSL 330 como version 100).

- Soporte múltiples formatos de Texturas: El módulo de texturas ha sido enormemente mejorado, no solo se pueden cargar nuevas extensiones.dds, .pkm, .ktx, .astc, .pvr; demás se puede escoger el formato interno de las texturas: GRAYSCALE, R5G6B5, R5G5B5A1, R4G4B4A4... DXT1, DXT3, DXT5, ETC1, ETC2, ASTC, PVRT...

- Módulo de Cámaras: Un nuevo módulo que incluye una serie de cámaras predefinidas para su uso: FREE, ORBITAL, FIRST_PERSON, THIRD_PERSON

- Módulo de Gestures: Un nuevo módulo que incluye soporte de múltiples gestos para dispositivos táctiles (Android, HTML5). Util para detectar TAP, DOUBLE-TAP, HOLD, DRAG, SWIPE_RIGHT...

- Modulo raygui: Un nuevo módulo para la creación de GUIs en modo immediato (IMGUI). Util para la creación de tools multiplataformas sin dependencias externas. Todavía en fase experimental pero totalmente funcional.

- Cientos de cambios y mejoras por todo el código

Además se han revisado y añadido +20 nuevos ejemplos de código mostrando todas las nuevas funcionalidades (http://www.raylib.com/examples.htm).

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

También se ha añadido en la web un nuevo foro donde los estudiantes pueden consultar sus dudas y enseñar sus juegos: http://www.raylib.com/forum/index.php?p=/categories

Como siempre, todo feedback es bienvenido!

Saludos,

Ray
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: megamarc en 04 de Septiembre de 2015, 01:52:45 PM
Buenas!

Impresionante trabajo el de tu librería, muy completa y de uso directo. Como autor de otra librería gráfica, aunque muy diferente a la tuya en enfoque (http://www.stratos-ad.com/forums/index.php?topic=16970.0 (http://www.stratos-ad.com/forums/index.php?topic=16970.0)), sé lo difícil que es llevar un proyecto personal adelante. Aparte de la librería en sí están los ports, los ejemplos, la documentación en línea... mucho trabajo! Así que te felicito. Además comparto tu interés por la programación "espartana", me crié con el BASIC de Spectrum y luego el Turbo C (no C++) de Borland. Ahora tiro mucho de notepad++ y mingw/gcc. Me parece muy bien que lo defiendas, cada vez más gente piensa que crear un videojuego consiste en utilizar algún tipo de entorno "point and click" lleno de asistentes sin escribir una línea de código (tipo GameMaker). Estas herramientas están muy bien como punto de entrada, pero nunca sustituirán a la flexibilidad ni la eficiencia de un buen programador.

Quería comentarte algunas cosas:

Me he bajado el proyecto master de github para compilarlo en Android (precisamente ahora estoy en la labor de portar el mío a Android y ya tengo JDK, SDK, NDK, Ant...) pero la carpeta raylib/template_android donde supuestamente está el proyecto no existe, ni he encontrado rastro de los fuentes del wrapper JNI. No sé si se trata de un error o lo has dejado fuera expresamente por algún motivo. No obstante sí que he encontrado los binarios precompilados.

Conoces Python? A pesar de que yo soy sobretodo programador de C, Python me parece muy adecuado para la programación de juegos, más incluso que C. C es sistemas: punteros, acceso directo a los datos en memoria, y máximo rendimiento. Imprescindible para crear librerías de bajo nivel. Pero no es interactivo y el proceso compilación/depuración a veces es tedioso, sobretodo sin un buen debugger. Python en cambio es abstracción, sintaxis limpia, y el modo inmediato desde consola es genial para probar cosas de forma interactiva (al estilo BASIC). Por ello escribí un wrapper para utilizar mi motor en C desde Python. Abrir una consola, escribir una orden y ver el resultado inmediatamente en la ventana gráfica asociada no tiene precio. Tu raylib, orientada a la enseñanza, es carne de cañón de la interactividad que ofrece python. Te has planteado lanzar un wrapper? Podría echarte una mano, si tuviera más tiempo te lo haría yo mismo pero eso es algo que no puedo prometer...

Nadie ha comprobado si compila en linux o si hay que tocar el makefile? O ya lo tienes resuelto pero no está en el proyecto master todavía?

Un saludo,
Marc
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 04 de Septiembre de 2015, 07:22:11 PM
Hola megamarc!

Muchas gracias por tus palabras y enhorabuena por Tilengine, un trabajo impresionante! Recuerdo haber visto el post en algún momento por el foro pero no había podido verla con detalle... Como comentas, el enfoque es diferente a raylib pero veo que tiene similitudes y que hay mucho esfuerzo puesto en ella; los ejemplos son muy espectaculares, que nostalgia cuando los veía! La web y la API reference están genial!

Solo un detalle sobre los samples, al intentar ejecutarlos directamente desde samples/win32 me pedía Tilengine.dll y SDL2.dll (era de esperar), pero casi todos los ejemplos se quedaban colgados; he deducido que no encontraba los recursos necesarios en la misma carpeta. También he echado de menos el código fuente de la librería... ;)

Sobre lo que me comentas de la compilación de raylib para Android, utiliza los mismos src que la versión escritorio, raspberypi o html5. Simplemente facilito el proyecto (o llamale makefile) C:\raylib\raylib\src_android\jni\Android.mk que hace referencia a las fuentes de C:\raylib\raylib\src y genera la librería que puedes encontrar en C:\raylib\raylib\templates\android_project\jni\libs\libraylib.a.
Ese mismo proyecto en templates: C:\raylib\raylib\templates\android_project\jni\basic_game.c es un proyecto de android que se puede compilar utilizando el NDK para generar directamente el .APK. Al instalar raylib, se instala Notepad++ portable preconfigurado con un monton de scripts (F6) para recompilar la librería o el proyecto Android.

Si, conozco Python aunque hace años que no lo utilizo... Escogí C para educación porque me parece básico, atemporal, multiplataforma (incluso microprocesadores) y su conocimiento se puede aplicar a muchísimos otros campos a parte del diseño de videojuegos, sin duda es el primer paso para dar luego el salto a C++ y C#... y básicamente porque creo que todo el mundo debería aprenderlo. Se que el proceso de compilación no es fácil, por eso a mis alumnos les facilito una serie de scripts con Notepad++ ya preparados. Respecto la depuración, creo que si el alumno aprende a convivir sin ella y es capaz de buscar sus errores, luego todo es infinitamente más sencillo.

Llevo 2 años utilizando raylib con más de 150 alumnos y hasta ahora ha funcionado excelentemente bien; la mayoría de alumnos, en apenas 40h de clase y empezando desde cero (sin haber escrito una linea de código en su vida), han sido capaces de crear un videojuegos programando a pelo (Notepad++), incluso algunos se han presentado a la Global Game Jam y han finalizado sus juegos con raylib... me parece increíble... y es una muestra de que raylib funciona para educación.

No me había planteado un wrapper para Python (tampoco se como hacerlo) pero todo añadido a raylib es muy bienvenido. :D

Respecto Linux, al parecer había un pequeño error en el makefile que ya esta resuelto en la rama develop de github.

De nuevo, muchas gracias por tu respuesta y tu feedback y enhorabuena por Tilengine!

Saludos,

Ray
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: megamarc en 05 de Septiembre de 2015, 12:33:20 AM
Hola Ray,

Gracias por tu extensa respuesta y por los halagos a Tilengine  :) No somos muchos por aquí haciendo librerías o motores gráficos multiplataforma... Paso a responderte:

Cita de: raysan en 04 de Septiembre de 2015, 07:22:11 PM
los samples al intentar ejecutarlos directamente desde samples/win32 me pedía Tilengine.dll
Los samples de Tilengine no te funcionan tal cual te lo bajas porque hay que hacer una pequeña instalación previa. Como este es tu hilo, te pongo el enlace al mío donde lo explico con más detalle. Espero que ahora puedas probarlo todo!
http://www.stratos-ad.com/forums/index.php?topic=16970.msg163686#msg163686 (http://www.stratos-ad.com/forums/index.php?topic=16970.msg163686#msg163686)

Cita de: raysan en 04 de Septiembre de 2015, 07:22:11 PM
También he echado de menos el código fuente de la librería...
Este es un tema recurrente, ejm... El caso es que de momento lo tengo cerrado. No me importaría abrirlo si viera que hay interés en colaborar, o por lo menos que alguien se animara a intentar probarla. Pero como nadie tiene interés en usarla pues no veo en qué me puede beneficiar abrirlo ahora, además ya es gratis sin limitaciones. Pero bueno, el tiempo dirá.

Cita de: raysan en 04 de Septiembre de 2015, 07:22:11 PM
...la compilación de raylib para Android, utiliza los mismos src que la versión escritorio...
Como estoy empezando y voy un poco verducho me había encallado. Echaba en falta la capa JNI. Pero después de profundizar un poco más, he visto que en la carpeta que comentas están los makefiles, he ejecutado el ndk-build y se ha generado sin problemas. También he entendido la ausencia del JNI, daba por hecho (porque es la práctica habitual) que en Android la aplicación principal está en Java y raylib en C nativo, en ese caso es necesario el JNI (como en Tilengine, que sí lo tengo hecho). Pero vosotros hacéis la aplicacion en Android también en C nativo, así que no es necesaria la capa JNI.

Qué bien que tengas a tus alumnos trabajando con raylib, testando, aportando ideas y viendo los proyectos que hacen, tiene que ser gratificante. Ahí me llevas mucha ventaja! En cuanto al uso de C, yo me encuentro divido al respecto. Durante muchos años sólo he programado en C, así que como es el lenguaje que más domino siempre es mi primera opción, y de hecho tanto Tilengine como la mayoría de ejemplos acompañados están en C. El típico caso del herrero que lo arregla todo a martillazos, no porque el martillo sea siempre la herramienta más adecuada sino porque es la que más domina y es eficiente usándola. Pero desde que empecé a conocer otros lenguajes con mayor abstracción me di cuenta de la enorme diferencia entra la programación de sistemas y la de aplicaciones. Hace unos cuantos años también fui profesor en una academia privada, y en el C se estrellaba mucha gente. Pese a ser mi "martillo", hoy en día ya no enseñaría C como primer lenguaje. Por lo que dices tus alumnos son artistas sin formación técnica. No dudo de la calidad de vuestro curso (que tampoco sé qué engloba ni cuáles son las expectativas de los alumnos) ni de los resultados finales, que por lo que dices son muy buenos. Pero se me hace extraño que alguien que no es ingeniero ni tiene intención de serlo, que sólo quiere una herramienta para poder expresar unas mecánicas de juego básicas y plasmarlas en un programa, tenga que empezar por el tedio del bajo nivel, punteros huérfanos, fugas de memoria, desbordamientos, una librería estándar críptica y poco intuitiva... Ojo, que esto no es una crítica, tan sólo una reflexión, no sobre la validez del C (que como lenguaje flexible y universal es totalmente incontestable) sino como la idoneidad de que sea el bautismo para un estudiante de aplicaciones de alto nivel, que bastante les cuesta a los pobres asimilar los conceptos básicos. Y que conste que yo soy el primero que me lo hago todo en C!

Me alegro que tengas resuelto el tema de linux, sino le iba a echar un vistazo porque mi librería ya tuve que portarla así que lo tengo fresco.

Y felicidades por tu enorme trabajo en raylib y por los buenos resultados que os está dando, esa es la mejor recompensa!

Un saludo y ánimo,
Marc
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 22 de Febrero de 2016, 01:31:31 AM
Hola a todos,

De nuevo, rescato el post original para anunciar raylib 1.4. De nuevo, tras muchas horas de trabajo llega una nueva versión de raylib. Algunas de las novedades de esta versión:

- Una gran novedad es la inclusión de un set de funciones para manipular imagenes: cortar, escalar, coloreado, flip, dithering e incluso dibujado de imagen sobre imagen o texto sobre imagen, todo ello en la CPU y antes de convertir la imagen a textura.

- El sistema de SpriteFonts ha sido mejorado añadiendo soporte para fuentes AngelCode (.fnt) y fuentes TrueType. Ahora el SpriteFont se genera automáticamente a partir del fichero .ttf.

- Nuevo módulo para físicas 2D (physac). Todavía en fase experimental pero completamente funcional, un par de ejemplos incluidos para un plataformas 2D y un sistema de aplicación de fuerzas.

- El módulo raymath ha sido revisado y transformado en un fichero .h (header-only) para mayor portabilidad. Se ha añadido la posibilidad de usar las funciones como inline.

- El módulo de detección de gestos (gestures) ha sido completamente rediseñado para soportar cualquier touch-event, incluso los provenientes de ratón. De este modo podemos crear juegos multiplataforma con la misma base de código.

- El sistema de inputs para Raspberry Pi tambien ha sido rediseñado para utilizar eventos genericos de Linux. Tambien se ha añadido soporte experimental para gamepad.

- Otros añadidos importantes incluyen funciones de raycast para 3D picking incluyendo detección de colisiones entre rayo y esfera/cubo; un par de funciones para guardar/cargar datos desde disco e incluso se ha añadido un pequeño módulo para easings (animación de valores).

- Sin duda, el añadido que más va a interesar a los usuarios van a ser los 8 nuevos ejemplos de código (http://www.raylib.com/examples.htm) y más de 10 ejemplos de juegos (http://www.raylib.com/games.htm) para aprender, incluyendo juegos clásicos como Arkanoid, Asteroids, Missile Commander, Snake, Pang o Tetris.

Muchas horas de trabajo han concluido en esta nueva versión de #raylib.

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

También podeis acceder al foro donde los estudiantes consultan sus dudas y enseñan sus juegos: http://forum.raylib.com

Como siempre, todo feedback es bienvenido!

Saludos,

Ray
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: XÑA en 22 de Febrero de 2016, 12:23:37 PM
Uau!! Qué pasada!!!!

He visto que funciona desde tu página Web... ¿Cómo se puede ejecutar el ejecutable? ¿webGL? ¿Cómo portas el código de Ca HTML? ???
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 22 de Febrero de 2016, 10:43:08 PM
Hola XÑA! Me alegro que te guste!  :)

Si, raylib soporta la compilación del código C directamente a asm.js (http://asmjs.org/ (http://asmjs.org/)). Para ello utilizo emscripten (http://kripken.github.io/emscripten-site/ (http://kripken.github.io/emscripten-site/)), es la misma tecnología que utilizan otras herramientas como Unity o Unreal en las últimas versiones, aunque raylib es mucho más libiano. Además, en raylib me he limitado a utilizar solo algunas de las funciones de OpenGL ES 2.0 para evitar capas de emulación al transformarse el código a WebGL y obtener así el máximo rendimiento.

En la Wiki de raylib https://github.com/raysan5/raylib/wiki/Compile-your-game-for-Web (https://github.com/raysan5/raylib/wiki/Compile-your-game-for-Web) hay algo más de explicación de como configurar y utilizar emscripten.

Evidentemente, todos los juegos y ejemplos están preparados para compilarse también en Escritorio, Android o Raspberry Pi. ;)
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: XÑA en 23 de Febrero de 2016, 01:05:28 PM
Uau!!!!!! ;)
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: Gallo en 23 de Febrero de 2016, 06:56:46 PM
Pedazo de update, lo comentaremos en el próximo programa
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 23 de Febrero de 2016, 11:10:34 PM
Hey Gallo! Muchas gracias por el interés! Si necesitáis cualquier tipo de información adicional solo tenéis que pedírmela!

Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 20 de Julio de 2016, 12:18:33 AM
Hola a todos!

Parece mentira que ya han pasado 2 años y medio desde que empece esta aventura llamada raylib... y sigo rescatando este post... :P

No mas esperas! Tras 5 meses de trabajo desde la última versión, hoy llega raylib 1.5! Esta nueva versión supone un gran rediseño de la librería y llega con increibles novedades:

- Soporte para Oculus Rift CV1 y VR simulado. Probablemente una de las pocas librerías del mercado que permite programar en C de manera sencilla para Oculus Rift CV1, incluyendo soporte para VR simulado; es decir, si no dispones de un dispositivo de VR, simplemente se genera un render en estereo con distorsión simulando las especificaciones del dispositivo seleccionado. Y funciona en todas las plataformas, incluyendo HTML5 y Raspberry Pi!

- Nuevo sistema de materiales. Soporte de materiales para modelos 3D, similar a otras herramientas del mercado, incluyendo soporte para color diffuse-ambient-specular y texturas diffuse-normal-specular.

- Nuevo sistema de iluminación, con soporte para 8 luces configurables de 3 tipos diferentes: point, directional y spot.

- Soporte de gamepad mejorado en Raspberry Pi. Multiple gamepads configurable soportados, realizando la lectura de datos en modo raw en un segundo thread.

- Sistema de físicas 2D mejorado, mucho más sencillo de utilizar y eficiente.

- Soporte para módulos de audio (.xm, .mod) y mezcla de multiples canales de audio.

- Otras mejoras como un sistema de cámara 2D, render a textura y soporte para OpenGL 2.1 en escritorio.

Todo apoyado con nuevos ejemplos de código y un instalador pre-configurado y autocontenido con todas las herramientas necesarias para empezar a desarrollar desde el minuto zero!

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

También podeis acceder al foro donde consultar dudas y enseñar vuestros juegos: http://forum.raylib.com

Como siempre, todo feedback es bienvenido! :)
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: Gallo en 21 de Julio de 2016, 10:40:23 AM
Enhorabuena por esta nueva versión, estas haciendo un muy buen trabajo con esta lib. Una pregunta, el sistema de materiales es un modelo fijo o se puede manipular / extender / reemplazar por uno propio? lo digo para utilizarlo con otros modelos como metalness/roughness (PBR) por ejemplo.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 21 de Julio de 2016, 01:52:44 PM
Gracias Gallo! Esta nueva versión ha supuesto bastante trabajo de rediseño para adaptar la librería al sistema de materiales/luces y al render estéreo para VR! A partir de aquí, espero que sea más sencillo añadir soporte para PBR.

Actualmente el sistema de materiales es fijo a nivel de usuario pero se puede modificar fácilmente a nivel de desarrollador. Simplemente tengo un shader standard (similar al de Unity) que soporta un número de parámetros configurables, básicamente determinados por las structs Mesh (atributos de vertices soportados: position, texcoords, texcoords2, normal, tangent, color)  y Material (parámetros soportados: color diffuse-ambient-specular, mapas diffuse-normal-specular). Todos estos datos los recibe el shader (solo si estan activos, es decir si han sido asignados) y el shader hace todos los cálculos pertinentes, incluyendo iluminación (según luces activas).

Cualquiera puede modificar el shader (o crearse el suyo propio) para hacer cálculos de iluminación más complejos o custom.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: Gallo en 21 de Julio de 2016, 07:35:18 PM
Ya que mencionas los atributos de vértice te recomiendo añadir la bitangent, y tanto tangent como bitangent calcularlas con la lib de mikktspace, la puedes pillar de aquí: https://github.com/carter2422/blender-ui/tree/master/intern/mikktspace que aparentemente es como un estandar, también se le llaman "synced normals". Estoy buscando algún articulo que lo explique pero solo encuentro posts por ahi en plan "sabiduría popular", es como yo me enteré en el foro de polycount, pero te puedo decir que los programas de modelado y motores como Unity (a partir de la 5.3) o UE4 (a partir de la 4.7) ya lo calculan con esa lib al importar.
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 23 de Julio de 2016, 07:20:30 PM
Muchas gracias Gallo! Muy interesante la librería! Sin duda me sera muy útil para cálculos de iluminación más complicados. :)

Como aportación adicional, una librería que justo he encontrado hoy y me parece increíble: https://github.com/ands/lightmapper
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: XÑA en 24 de Julio de 2016, 09:10:01 AM
Uau!!! Hay unas librerías alucinantes hoy en día.... RayLib es brutal!!!

Quizás ya un poco compleja para utilizar C.... ;)
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: Nucleorion en 25 de Octubre de 2016, 11:47:25 AM
Tengo un problema que la compilacion en exe solo me funciona en algunos ordenadores. Para las dudas y problemas hay algun foro en español?
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 25 de Noviembre de 2016, 12:46:54 AM
nueva versión de raylib disponible! Commemorando el tercer aniversario de la libreria llega raylib 1.6 con un monton de novedades:

- Binding completo a LUA. Toda la funcionalidad de raylib desde LUA! Incluyendo +60 ejemplos de código portados a LUA.

- Modulo de audio completamente rediseñado, mucho más versatil, facil de utilizar y con soporte mejorado para procesado de audio y streaming de musica (+20 nuevas funciones).

- Physac, nuevo módulo de físicas 2D, completamente reescrito desde cero por @victorfisac! Gravedad, fricción, coeficientes de restitución, rotura de poligonos... Realmente impresionante!

- Módulos camera y gestos revisados, simplificados y portados a librerias header-only para máxima portabilidad y flexibilidad.

- Soporte de gamepads mejorado en plataformas de escritorio y Raspberry Pi, con la inclusion de nuevas funciones para configuraciones de gamepads custom.

- Soporte de fuentes de texto mejorado, incluyendo soporte para ASCII extendido (idiomas europeos) y generación de fuentes desde ficheros TTF. Filtrado de texturas configurable!

- Sistema de build mejorado con soporte para compilación a librería dinámica (raylib.dll) e inclusión de múltiples proyectos para Visual Studio C++ preconfigurados.

Como siempre, todo apoyado con nuevos ejemplos de código y un instalador pre-configurado y autocontenido con todas las herramientas necesarias para empezar a desarrollar desde zero!

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

También podeis acceder al foro donde consultar dudas y enseñar vuestros juegos: http://forum.raylib.com
Título: Re:raylib - Librería en C para APRENDER programación de videojuegos
Publicado por: raysan en 25 de Mayo de 2017, 12:09:35 PM
(https://c3.patreon.com/2/patreon-posts/16151946369794127968.png?t=1495929600&v=iRjzyQwXXFZswYcqK_q5-hQn86g7Ird9_V5CW9Me4RI%3D)

Hola a todos!

Tras 6 meses de trabajo llega una nueva versión de raylib con increíbles mejoras!

- Más de 30 nuevas funciones añadidas a la libreria: control de ventana, utilidades para archivos, dibujado de lineas con grosor, detección de colisiones 3d detallado, simulador VR y mucho más.

- Soporte de flags para configurar cada módulo de raylib de manaera independiente. Los usuarios avanzados pueden escoger en tiempo de compilación que features desean que incluya la librería, evitando featues no deseadas.

- Sistema de build mejorado en todas las plataformas (Windows, Linux, OSX, RPI, Android, HTML5) con un único Makefile para compilar el código fuente. Añadido soporte para compilación Android con custom toolchain y nuevos flags de compilación.

- Nuevos ejemplos y juegos añadidos a la colección. Todo el material ha sido revisado y mejorado, adaptándolo a la nueva versión y testeado en múltiples plataformas. Sistema de build mejorado para ejemplos.

- Mejorada consistencia y organización de la librería, algunas funciones y parámetros han sido renombrados y muchas partes de la librería han sido revisadas, con código más claro y mejores comentarios. Partes de la librería han sido simplificadas ofreciendo una implementación más genéricas.

- Otras muchas features: Soporte para gamepad en HTML5, soporte pantalla tactil en RaspberryPi, soporte audio 32bit, mejoras en el timming de frames, soporte para formato de datos custom rres, grabación automática de animaciones GIF...

Tal vez el añadido más interesante para muchos estudiantes sea la posibilidad de generar automaticamente un GIF de su juego, simplemente pulsando CTRL+F12 para grabar/parar en cualquier momento.

Como siempre, todo apoyado con nuevos ejemplos de código y un instalador pre-configurado con todas las herramientas necesarias para empezar a desarrollar desde el primer minuto!

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

También podéis acceder al foro donde consultar dudas y enseñar vuestros juegos: http://forum.raylib.com