Texturas y otras cosas para MotorJ - 28/05/2007, 01:03

He estado jugando un rato con el texturizado y los canales ALPHA en MotorJ, espero tener tiempo pronto para poner bien los archivos y actualizar el repo.



El texturizado quiero que quede realmente fácil. En OpenGL ya de por sí es fácil, pero aún me tomó tiempo recordar cómo se hacía (Nota: eso NO es excusa para olvidar o no aprender cómo se hace directamente en OpenGL --nadamás échenle un ojo de vez en cuando al código). Me metí con el rollo de las texturas y los canales alpha debido a que quise usar SDL_TTF para poner texto en las aplicaciones (quería crear un menú), y me encontré con que oh, sorpresa, no se puede aplicar BLIT (una operación que combina 2 texturas) contra la "superficie de la pantalla" de OpenGL, así que lo que hay que hacer (que ya no lo veo tan horrendo pero aún así tiene sus detalles) es crear una textura dentro de OpenGL, y aplicar BLIT entre la textura con el texto generada por SDL_TTF y la textura dentro de OpenGL, para poder mostrarlo después, texturizando un GL_QUAD como si fuera cualquiera otra textura. Esto tiene la ventaja, contra lo que estaba intentando hacer al principio, que servirá para ponerle efectos bastante interesantes al texto posteriormente (finalmente se va a poder manipular como cualquier polígono porque va a estar sobre un polígono).

Varias cosas cambiarán.. por otro lado, me he dado cuenta de que por el hecho de que (hasta donde sé) no existe SDL en el DS, no se puede tomar el universo.cpp del proyecto de PC y plantárselo tranquilamente al de DS (además estaría bastante canijo -- las 2 arquitecturas difieren demasiado en capacidades), sin embargo, sí pienso modificar lo que hay en la parte del DS para que quede conforme al esquema porque ha funcionado muy bien.

Probablemente aparecerá en varios lugares una estructura de control de la aplicación, y las bibliotecas disponibles también van a aumentar..

Por el momento les paso el siguientes archivo, el cual contiene una función para cargar una imagen BMP CUADRADA de cualquier tamaño (Nota importante: OpenGL las prefiere de tamaños en múltiples de 2, es decir, 2, 4, 8, 16, 32, 64, 128, 256, 512, etc -- no se recomienda que sea demasiado grande, depende de las capacidades de tu tarjeta gráfica) a un arreglo de GLubytes en formato RGB y otra para convertir esa textura en un arreglo de GLubytes en formato RGBA.

Cargar la imagen de un BMP es trivial, basta con saber interpretar el encabezado (o mandarlo a volar XD) y luego invertir los bytes correspondientes a los verdes y los azules (o algo así, sigue siendo trivial).

Una vez cargada la imagen, se puede asociar con técnicas de OpenGL y usarla sobre un polígono..

Estos archivos requieren adicionales.h y adicionales.cpp del repo para funcionar..

lidsol/texturas.cpp
lidsol/texturas.h

Ahora que lo pienso, SDL_image me parece que trae ya subrutinas parecidas a éstas. Tendré que revisarlo..



< Back to blog

This site doesn't use cookies, does not log IPs and does not track you in any way.