ADMINBLOG PROYECTOSDESCARGASNORMASACERCA DE
Blog de Miguel Herrero
Monkey Island & Zelda guitar medley

Hoy por la mañana me he levantado hecho una mierda: tos, mocos, las narices taponadas, dolor de cabeza, un frío polar y encima era bastante temprano. Tras desayunar un vaso de leche para entrar en calor me he puesto a tocar un poco la guitarra, para grabar un par de capas más para unas canciones que estoy terminando. Y al final necesitaba tocar algo un poco más desenfadado y gamberro.

Así que he empezado a trastear con la melodía de Monkey Island, primero un poco las notas iniciales, luego le he metido los patrones de batería y no ha quedado nada mal. Al final me parecía que quedaba un poco corto, así que he empalmado con el tema principal de Zelda.

He de reconocer que no lo he grabado todo a la primera. El lead de guitarra de Monkey Island lo he hecho con 3 partes, aunque el de Zelda está hecho del tirón. Ha quedado divertido, aunque ya sé que está muy visto (sobre todo el de Monkey Island). Además he probado a grabar el bajo con un filtro especial de la pedalera y no está mal, aunque no es lo mismo que tocar con un bajo de verdad :)

Descarga directa | Monkey Island & Zelda guitar medley

 
Recoplatorio “RONF Net Compilation”

Ha salido el recopilatorio de RONF con bandas que se dedican fundamentalmente a hacer ruido. No creo que haya mucho público para este tipo de música en este blog, pero me hacía ilusión participar en él y salir junto a otras bandas. Mi aportación es de lo más comercial del disco, así que estáis advertidos. Los mejores temas, a mi juicio son los de Darph Nader, Krosot, Mixturizer, Trinity y Spooklights. El resto rozan esa pequeña línea que para algunos es arte y para otros es… mejor no decir nada, hay gustos para todo :)

Cambiando de tema, he jugado un poco más al Demetrium: The Ward y ya le empiezo a ver chapucillas al motor gráfico, aunque están bien hechas, que la DS no da para más. Sin embargo empieza a ser extremádamente repetitivo y mucho tienen que mejorar las cosas si quieren que no se quede en una buena demo tecnológica (si por algo lo comparan con Doom 3 :P ).

 
De buen humor

Acabo de descubrir el bug que no conseguía ver ayer. Hoy no he programado nada hasta hace unos minutos. He abierto el Eclipse y he leído el código. Y el fallo estaba ahí, delante de mis narices. Un puñetero offset al calcular el comienzo de las coordenadas de textura. El offset estaba mal calculado y como bien decía Waaghman, cogía un valor erróneo al mapear la textura. Ahora parece una tontería, pero me tiré un buen rato comprobando qué podría estar mal.

Al menos ya está arreglado y estoy de buen humor, no me gusta nada atascarme en estas tonterías. Sin embargo el error ha sido mío por fiarme del código de alguien. Aún así, sigo pensando que OpenGL es una API muy agradecida. Las cosas se hacen con pocos parámetros y el código se mantiene legible.

Hoy por la mañana ha sido el cursillo de extensión sobre shaders HLSL. Ha sido un poco rollo, la verdad. Pero claro, el temario del primer día era: introducción a los gráficos 3D, una explicación de la fixed-pipeline, algo de álgebra y hacer una aplicación con el Visual Studio que mostraba un quad. Con ese temario hay que reconocer que los “profesores” (¿no suena raro que os llame profesores?) lo hicieron muy bien. En especial Gusi, que tenía el temario más duro de todos (el de álgebra) lo dió de una manera distendida y práctica.

Así que el comienzo ha sido bastante bueno. Lástima que la sala tuviera 4 o 5 ordenadores estropeados que, casualmente, nos tocaron a nosotros. Pero bueno, las salas SIEMPRE tienen algún ordenador estropeado.

Por la tarde no he hecho gran cosa, básicamente he jugado un poco más al Cave Story aunque creo que empiezo a tener demasiados juegos en paralelo y que va tocando terminar alguno. Además hace unas horas que ha salido Dementium para la DS y, por lo poco que he jugado, parece un juego muy decente. Aunque me huelo que va a ser más bien cortito. También creo que le hace falta algunos efectos de partículas (¡SANGRE!) en los enemigos porque, de qué vale teñir las paredes de sangre si luego los enemigos parecen el mayordomo de Tenn.

De momento creo que voy a terminar lo básico en el módulo de gráficos de Melt, y empezaré con los otros. Quizá durante el cursillo me convenzan para utilizar la programmable-pipeline después de todo.

 
Resumen de hoy

Voy a hacer un resumen de las pocas cosas que merecen ser mencionadas del día de hoy. Me he pasado toda la mañana para hacer un maldito cargador de texturas que utilice la librería de java ImageIO. El problema al final no era el cargador, sino la geometría la que está mal, porque en un ejemplo que tengo funciona perfectamente.

La geometría la implementé con VBOs y se muestra correctamente, incluso los colores por vértice, pero por alguna razón la textura de césped que le aplico hace que se vea el cuadrado verde. Es decir es como si solo cogiese un píxel de la textura. Y las coordenadas están bien puestas, porque si renderizo con modo inmediato en vez de con VBO se ve bien.

Por la tarde estaba hasta las narices de tanto OpenGL y me dediqué a ver las nuevas releases de juegos de DS que han salido. No hay nada excesivamente rompedor, pero hay cosas interesantes. También probé la versión para PC de Puzzle Quest, que es exactamente lo mismo, pero todo muchísimo más bonito claro. Efectos de partículas por doquier y muchos xml con parámetros del juego, así que no será raro ver algunos “mods” hechos por usuarios en poco tiempo.

Luego alguien me avisó de que ya había salido un recopilatorio de grupos noise y ambient en el que yo participo. Es un recopilatorio online así que es para darse a conocer más que otra cosa, pero siempre hace ilusión ver tu nombre por ahí. En cuanto pueda pongo un enlace.

Y básicamente eso es todo. Mañana comenzará el cursillo de shaders del Gamelab, así que podré postear cosas más interesantes. Me voy a jugar un rato al Cave Story.

 
Entendiendo OpenGL

Hoy me he dedicado a 2 cosas (3 si contamos el catarro): hacer una página web para melt y aprender los conceptos básicos de OpenGL. Tras tener una ventana de renderizado y despejar un poco haciendo el html de la web, hoy iba dispuesto a aprender cómo hacer el bucle de renderizado, almacenar la geometría de los objetos, las texturas, etc. Todo el mundo dice que OpenGL tiene una buena API para aprender, y tienen bastante razón.

Yo ya conocía algunos de los procedimientos tras haber utilizado las DirectX administradas, aunque la parte de carga de modelos la hacía con las clases de utilidad y los cambios de estado se gestionaban cambiando tal o cual objeto. Sin embargo me encuentro ahoar con la posibilidad de usar varios sistemas para dibujar las geometrías, e implican almacenar los vértices y demás de maneras concretas.

La primera es el modo inmediato. Es la que todos habréis visto en los tutoriales de NeHe y realmente es algo muy sencillo. Pero tener que llamar a una función por cada vértice, por cada coordenada de textura y demás no la hacen demasiado eficiente, así que queda descartada.

Luego tenemos las display lists, que son como si empaquetásemos instrucciones del modo inmediato. Son mucho más eficientes y técnicamente puedes meter cualquier cosa. Sin embargo no me quedan muy claras. ¿Debería crear una lista por cada geometría? ¿Solo por las geometrías que están dentro del frustum? ¿Vale también para “empaquetar” instrucciones relacionadas con los materiales (asignar texturas y valores ambiental, difuso, …) ?

También están los vertex arrays que son precisamente arrays de vértices que le pasamos al renderizador con una sola función, pero no está cacheado como las display lists. Sin embargo, permite modificar los vértices a posteriori, cosa que las display lists no.

Por último tenemos los Vertex Buffer Objects o VBO. Se supone que tenderán a ser el estándar para este menester, pero ahora parece que están todavía muy verdes. Pueden ser dinámicos o estáticos, con lo que deberían ser equivalentes a los métodos anteriores. Sin embargo, los VBO estáticos parecen estar por debajo de las display lists en todos los benchmarks, y los VBO dinámicos tienen problemas de rendimiento.

Mis dudas son que no sé qué estructura crear y como utilizarlas. No sé si tengo que crear dichas estructuras cada frame una vez hecho el culling. Además, son estructuras que maneja internamente OpenGL, así que nosotros no reservamos memoria para ellas pero ¿dónde se almacenan? porque si es en la tarjeta gráfica, no creo que sea buena idea almacenar todo ahí.

Ahora, he de decir que la API en sí está muy bien diseñada y resulta sencilla de entender. Aunque puede que cuando empiece a utilizar las diversas extensiones la cosa se desmadre un poco. Menos mal que la página web ha quedado sencilla a la par que elegante. En cuanto tenga algo de contenido os la mostraré, no hay prisa.