Programando juegos con irrlicht
Viendo en el foro que somos muchos que estamos con la idea de programar un juego con un final un tanto decente, propongo que entre todos aprendamos y discutamos los temas con Irrlicht junto a un compilador de C++, ya sea codeblok, devcpp o visual C++ express.
Muchos participamos y aprendimos con el tema de Cibertronic sobre Blitz3d, pero después de comenzar a realizar nuestros proyectos Blitz nos queda un tanto corto y necesitamos una herramienta más potente.
Y que mejor que algo potente y además libre.
Irrlicht es una buena opción por varios motivos. Encontramos abundante documentación del por la red (mucha en inglés), su foro es muy activo, su estructura de programación es bastante sencilla incluso para los que recién comienzan en C++ y en su página tenemos muchos ejemplos de dónde podemos tomar ideas aprender y usarlos en nuestros propios proyectos.
Yo en el momento lo estoy usando con codeblok y les dejo la página de Irrlicht donde Álvaro f. Celis (muy visto en todos los foros de quienes buscamos información de programación de juegos) hizo un tutorial de cómo instalar y ejecutar Irrlicht con codeblock: http://Irrlicht.sourceforge.net/tut_codeblocks.html.
Su página principal es : http://Irrlicht.sourceforge.net.
Su foro: http://Irrlicht.sourceforge.net/phpb2/index.php.
Y su wiki que siempre está actualizándose. http://www.irrlicht3d.org/wiki/.
Espero puedan instalarlo y comenzar a utilizarlo y entre todos poder comenzar juntos su aprendizaje. Un saludo paio.
Programando juegos con irrlicht
Buenísimo paio, instalando. Che paio, con el tiempo podría hacerse una serie de actividades (de lo simple a lo complejo), así que, recomiendo que cuelgues un mensaje (en este hilo).
Dedicado a subir exclusivamente los avances y los códigos (por Irrlicht - Actividades), a ver si se entiende, así no se rompen la cabeza buscando códigos en el futuro, para una mejor organizacion.
saludos y que esto siga adelante.
Programando juegos con irrlicht
Bien como decía Irrlicht tiene una gran bentaja y es su gran cantidad de documentación tanto en su página como en sus foros.
Estos están todos en inglés, pero para eso se creó Google translator (o similares).
Aquí les dejo traducido el primer tutorial de Irrlicht, el famoso hello wolrd.
Espero sea útil.
Tutorial 1: helloworld.
https://www.foro3d.com/images/upload...2009/05/13.jpg
Este tutorial muestra cómo configurar el IDE para utilizar el motor de Irrlicht y cómo escribir un simple programa helloworld con él.
El programa mostrara cómo utilizar las bases de videodriver, el guienvironment, y la scenemanager. Microsoft visual Studio se utiliza como un IDE, aunque ud también será capaz de comprender todo, aunque este utilizando otro distinto, o incluso otro sistema operativo.
Tienes que incluir el archivo de cabecera <Irrlicht, h> para poder utilizar el motor. El archivo de cabecera se puede encontrar en el directorio include de SDK del motor Irrlicht. Para que el compilador encuentre este archivo de cabecera, debe determinar el directorio donde se encuentra. Esto es diferente para cada IDE y del compilador que use. Vamos a explicar en breve cómo hacer esto en Microsoft visual Studio:
o si utiliza la versión 6.0, seleccione el menú extras -> opciones. Seleccione la pestaña de directorios, y seleccione incluir en el combo box. Añadir el directorio include de la carpeta del motor Irrlicht a la lista de directorios. Ahora, el compilador se encontrara el Irrlicht, h archivo de cabecera. También tenemos la Irrlicht, lib que encontrar, a fin de permanecer en ese cuadro de diálogo, seleccione bibliotecas en el cuadro combinado y añadir el lib/visualstudio directorio.
https://www.foro3d.com/images/upload...2009/05/14.jpg
o si el IDE es de visual Studio. Net, seleccione herramientas -> opciones. Seleccione la entrada de los proyectos y, a continuación, seleccione los directorios VC + +. Seleccione mostrar los directorios de incluye archivos en el combo box, y añadir el directorio include de la carpeta del motor Irrlicht a la lista de directorios. Now the compiler Will find the Irrlicht, h Header file. Ahora, el compilador se encuentra el Irrlicht, h archivo de cabecera. También tenemos la Irrlicht, lib que se encontrar, a fin de permanecer en ese cuadro de diálogo, seleccione biblioteca para mostrar los directorios de archivos y añadir el lib/visualstudio directorio.
https://www.foro3d.com/images/upload...2009/05/15.jpg
Con su IDE creado de esta manera, usted será capaz de desarrollar aplicaciones con el motor Irrlicht.
Vamos a empezar.
Después de haber creado el IDE, el compilador sabrá dónde encontrar los archivos de cabecera del motor Irrlicht para que poder incluirlo en nuestro código.
# include <Irrlicht, h> .
En Irrlicht, todo se puede encontrar en el espacio de nombres IRR . Así que, si desea utilizar una clase del motor, tienes que escribir IRR: antes de que el nombre de la clase.
Por ejemplo, para utilizar el irrlichtdevice debe escribir: IRR: irrlichtdevice. Para deshacerse de la IRR: delante del nombre de cada clase, le decimos al compilador del uso de este nombres a partir de ahora, y no tendremos que escribir IRR: nunca más.
using namespace IRR; .
Hay 5 sub names en el motor de Irrlicht. Echa un vistazo a ellos, puede leer una descripción detallada de ellos en la documentación haciendo clic en la parte superior del menú namespace list o usando este enlace: http://Irrlicht.sourceforge.net/docu/namespaces.html igual IRR namespce, no queremos estos 5 sub nombres ahora, para que este ejemplo sea simple. Por lo tanto, le decimos una vez más al compilador que no queremos escribir siempre sus nombres.
using namespace Core, namespace fundamentales.
Using namespace scene, namespace de escena.
Using namespace video, namespace de vídeo.
Using namespace io, namespace io.
Using namespace GUI, namespace GUI; .
Para poder utilizar el archivo Irrlicht. Dll, tenemos que enlazar con el Irrlicht, lib. Se podría establecer esta opción en la configuración del proyecto, pero para hacerlo más fácil, usamos un comentario Pragma lib para visualstudio. En las plataformas Windows, tenemos que deshacernos de la ventana de la consola, que aparece al iniciar un programa con main (). Esto se hace por la segunda Pragma. También podríamos utilizar el método winmain, aunque perderíamos la independencia de la plataforma entonces.
# ifdef _irr_windows_.
# Pragma comentario (lib, Irrlicht, lib).
#Pragma comentario (linker, /subsystem:Windows /entry:maincrtstartup).
# endif .
Este es el método principal. Ahora podemos utilizar main () en cualquier plataforma.
Int main ().
{ .
La función más importante del motor es la función createdevice (). El irrlichtdevice es creado por él, que es el objeto raíz para hacer todo con el motor.
Createdevice () tiene 7 parámetros:
o devicetype: tipo de dispositivo. Este es objeto puede ser null-device, uno de los dos programas renderizadores, d3d8, d3d9, u OpenGL. En este ejemplo utilizamos edt_software, pero para probar, puede cambiar si desea a edt_burningsvideo, edt_null, edt_direct3d8, edt_direct3d9, o edt_opengl.
o windowsize: tamaño de la ventana o fullscrenmode. En este ejemplo utilizamos 640x480.
o cantidad de bits de color por píxel. Este debería ser de 16 o 32. El parámetro es a menudo ignorado cuando se ejecuta en modo ventana.
o fullscreen: especifica si queremos que se ejecute en el modo de pantalla completa o no.
o stencilbuffer: especifica si queremos utilizar el buffer (para dibujar las sombras).
o especifica si queremos tener VSync activado, esto es sólo útil en el modo de pantalla completa.
o eventreceiver: un objeto para recibir eventos. No queremos utilizar este parámetro, y lo ponemos a 0.
Always chek the return value todo cope with unsupported drivers, dimensions, etc. Compruebe siempre el valor de retorno por no soportados drivers, dimensiones, etc.
irrlichtdevice *device =
# ifdef _irr_osx_platform_ createdevice (video:edt_opengl dimension2d<s32>(640, 480), 16 false, false, false, 0).
# else createdevice (video:edt_software dimension2d<s32>(640, 480), 16 false, false, false, 0).
#endif.
If (.device) treturn 1;.
Establecer el título de la ventana con un buen texto. Tenga en cuenta que hay una l en frente de la cadena. The Irrlicht engine uses wide character string when displaying text. El motor de Irrlicht usa cadenas de caracteres cuando muestra el texto.
device->setwindowcaption(l hello world. - Irrlicht engine demo), .
Obtener un puntero a videodriver, el scenemanager y la interfaz gráfica de usuario, para que no siempre tener que escribir device-> getvideodriver ().
Device-> getscenemanager (), o device-> getguienvironment ().
ivideodriver* driver = device->getvideodriver().
Iscenemanager* smgr = device->getscenemanager().
Iguienvironment* guienv = device->getguienvironment(), .
Añadimos una etiqueta con hola mundo a la ventana, usando el entorno gráfico. El texto se coloca en la posición (10,10) de la esquina superior izquierda y (260,22) de la esquina inferior derecha.
guienv->addstatictext(l hello world. This is the Irrlicht software renderer, rect<s32>(10,10,260,22), true), .
Para mostrar algo interesante, se carga un modelo de Quake 2 y lo mostramos. We only have todo get the Mesh from the scene manager with getmesh() and add a scenenode todo display the Mesh with addanimatedmeshscenenode (). Sólo tenemos que obtener la malla del administrador de escena con getmesh () y añadir un scenenode para visualizar la malla con addanimatedmeshscenenode (). Comprobamos el valor de retorno de getmesh () para saber si hubo problemas de carga u otros errores.
En vez de escribir el nombre del archivo sydney, md2, también sería posible cargar un objeto Maya (archivo. Obj), un completo mapa Quake 3 (. Bsp) o cualquier otro formato de archivo compatible. Por cierto, este modelo col de Quake 2 llamado Sidney fue modelado por Brian Collins.
ianimatedmesh* Mesh = smgr->getmesh(././media/sydney, md2).
If (.Mesh).
Return 1.
Ianimatedmeshscenenode* node = smgr->addanimatedmeshscenenode (Mesh), .
Para que la malla se vea un poco más agradable, cambiamos su material. Desactivamos la iluminación, porque nosotros no tenemos luz dinámica, y la malla negra sería totalmente lo contrario. Luego establecemos el marco de bucle, de manera que, la animación predefinida stand se utiliza. Y por último, aplicamos una textura a la malla. Sin esto la malla se vería de un solo color.
if (node).
{.
Node->setmaterialflag(emf_lighting, false).
Node->setmd2animation(scene:emat_stand).
Node->setmaterialtexture (0, driver->gettexture (t././media/sydney, bmp)).
}.
Para ver la malla, colocamos una cámara en el espacio 3d (0, 30, -40). La cámara mirara a (0,5,0), es decir, aproximadamente el lugar dónde está nuestro modelo md2.
Smgr->addcamerascenenode (0, vector3df (0,30,-40), vector3df (0,5,0)), .
Bueno, ahora tenemos creada la escena, dibujemos todo: corremos el dispositivo en un while () bucle, hasta que el dispositivo no se dese ejecutar más. Esto sería cuando el usuario cierra la ventana o presiona Alt + f4 (o lo cierra una ventana de código clave).
While (device->run()) t{ .
Todo puede ser señalado entre una llamada a beginscene () y endscene (). La llamada beginscene () borra la pantalla con un color y el buffer de profundidad, si se desea. Then we let the scene manager and the GUI environment draw their content. Entonces dejamos el scenemanagery el GUI dibujar su contenido. Con la llamada a endscene () todo se representa en la pantalla.
Driver->beginscene (true, true, scolor(255,100,101,140)).
Smgr->drawall().
Guienv->drawall().
Driver->endscene ().
}.
Después de hacer todo con el bucle, tenemos que eliminar el Irrlicht device creado antes con createdevice (). En el motor Irrlicht, usted tiene que eliminar todos los objetos que ha creado con un método o una función que empiece con create. Estos objetos son simplemente borrados llamando -> drop(). Consulte la documentación en IRR: ireferencecounted:drop () para más información.
device->drop().
Return 0.
} .
Eso es todo. Compilar y ejecute.