Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo

// Mayo 10th, 2008 // game development, linux, tutoriales

Instalar software necesario

Checa esta guía: Instalar Netbeans 6.1 en Ubuntu 8.04 Hardy Heron

Crear un nuevo proyecto C++

new-project.png

Este tutorial asume que ya tenemos compilado e instalado Irrlicht en nuestro sistema.
También que ya descargamos e instalamos NetBeans 6.1.

new-c++-app.png

Vamos al menú File → New Project…

En Categories seleccionamos C/C++ y en Projects seleccionamos C/C++ Application.

En la siguiente pantalla le damos el nombre que queramos a nuestra aplicación, en mi caso decidí llamarla tutorial2.

Observa los directorios donde se guardará tu proyecto, los vas a requerir cuando necesites poner ahi algunos modelos de ejemplo y/o texturas.

Configurar las bibliotecas a enlazar

Ahora damos clic con el botón derecho sobre el nombre del proyecto y elegimos Properties.

En la ventana de propiedades del proyecto seleccionamos Build → Linker → Libraries → …

Aparecerá otra ventana donde podremos configurar las bibliotecas con las que vamos a enlazar nuestro proyecto.

libraries.png

Damos clic al botón que dice Add Library… y navegamos a nuestro directorio /usr/local/lib y damos doble clic sobre el archivo libIrrlicht.a

Repetimos el procedimiento para el archivo: libXxf86vm.a localizado en el directorio: /usr/lib

Y una vez más para /usr/lib/libGL.so.

Para agregar esa última biblioteca recuerda seleccionar Dynamic Library (.so) en donde dice Archivos de tipo:, localizado en la parte baja de la ventana llamada Select Library.

Da clic en OK para guardar tus cambios y cerrar la ventana.

project-properties.png

Estamos de regreso en las propiedades del proyecto, el campo de Libraries debe verse como en la imagen de al lado.

Escribir nuestro primer programa Irrlicht

En el panel de nuestro proyecto damos clic con el botón derecho sobre la carpeta llamada Source Files y seleccionamos New → Empty C++ File… y lo nombramos main.cpp (puedes ponerle el nombre que gustes).

Para que él texto quedara más legible aquí en el blog, decidí seccionar las líneas de código demasiado largas. El compilador no debe tener problema alguno con ello.

Copia los archivos ~/src/irrlicht/media/sydney.md2 y ~/src/irrlicht/media/sydney.bmp al directorio del proyecto que creaste con NetBeans (en mi caso es ~/development/tutorial2).

Y ahora escribe el siguiente código en él.

#include <irrlicht.h>

/*
 * En el motor gráfico Irrlicht, todo puede ser encontrado
 * en el espacio de nombres (namespace) 'irr'.
 *
 * Si deseas usar una clase de este motor gráfico, debes
 * escribir 'irr::' antes del nombre. Por ejemplo para usar
 * el IrrlichtDevice debes escribir: 'irr::IrrlichtDevice'.
 *
 * Para deshacernos del 'irr::' le indicaremos al compilador
 * que vamos a usar ese espacio de nombres de ahora en
 * adelante.
 */
using namespace irr;

/*
 * Hay 5 sub espacios de nombres en el motor gráfico
 * Irrlicht.
 *
 * Puedes leer una descripción detallada acerca de ellos en:
 * http://irrlicht.sourceforge.net/docu/namespaces.html
 *
 * Así como con el espacio de nombres 'irr', le indicaremos
 * al compilador que usaremos los siguientes espacios de
 * nombres.
 */
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

int main() {

    /*
     * La función más importante en este motor gráfico es
     * 'createDevice', sirve para crear el 'Irrlicht Device'
     * el cual es el objeto raíz que sirve para hacer todo
     * en Irrlicht.
     *
     * createDevice() tiene 7 parámetros:
     *
     * deviceType: El tipo de dispositivo. Este puede ser un
     *  dispositivo nulo, un dispositivo de software, un
     *  dispositivo de software #2, D3D8, D3D9 u OpenGL.
     *  En este ejemplo usaremos el EDT_SOFTWARE, pero si
     *  gustas puedes probar con: EDT_BURNINGSVIDEO,
     *  EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9 o
     *  EDT_OPENGL.
     *
     * windowSize: Tamaño de la ventana o modo a pantalla
     *  completa a ser creado. En este ejemplo usamos
     *  640x480.
     *
     * bits: Cantidad de bits por pixel cuando estamos en
     *  modo a pantalla completa. Puede tomar el valor de
     *  16 o 32. Este parámetro es ignorado cuando se está
     *  en modo ventana.
     *
     * fullscreen: Especifica si queremos que el dispositivo
     *  se ejecute en pantalla completa o no.
     *
     * stencilbuffer: Especifica si queremos usar el stencil
     *  buffer para dibujar las sombras.
     *
     * vsync: Especifica si queremos tener activada la
     *  sincronización vertical (vsync), esto sólo es útil
     *  en el modo a pantalla completa.
     *
     * eventReceiver: Un objeto que recibe eventos. No
     *  vamos a usar este parámetro ahorita, así que lo
     *  dejamos en 0.
     */
    IrrlichtDevice *device = createDevice(EDT_SOFTWARE,
            dimension2d<s32 > (640, 480),
            16, false, false, false, 0);

    /*
     * Ahora le pondremos un buen título a nuestra ventana.
     * Podrás notar que hay una 'L' delante de la cadena.
     * Esto es porque Irrlicht emplea cadenas del tipo
     * 'wide character' para manejar texto.
     */
    device->setWindowCaption(L"Lobo tuerto - ¡Hola Mundo!");

    /*
     * Guardaremos un apuntador al manejador de video, otro
     * al administrador de escena y uno más al ambiente de
     * la interfaz gráfica de usuario (GUI), para no tener
     * que estar escribiendo siempre:
     *
     * device->getVideoDriver(),
     * device->getSceneManager() y
     * device->getGUIEnvironment().
     */
    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();

    /*
     * Usando el ambiente GUI, agregaremos a la ventana una
     * etiqueta que diga 'Mi primer programa con Irrlicht'.
     */
    guienv->addStaticText(L"Mi primer programa con Irrlicht",
            rect<s32 > (10, 10, 260, 22), true);

    /*
     * Hagamos algo interesante, carguemos un modelo de
     * Quake 2 y mostrémoslo en pantalla.
     *
     * Primero debemos cargar el modelo usando el método
     * getMesh() en el administrador de escena
     * (SceneManager).
     *
     * Después debemos agregar un nodo de escena (SceneNode)
     * usando el método addAnimatedMeshSceneNode() para
     * poder mostrarlo en pantalla.
     *
     * También es posible cargar un modelo de Maya (.obj),
     * un mapa completo de Quake 3 (.bsp) o un archivo
     * de Milkshape (.ms3d) en lugar del modelo sydney.md2.
     * Por cierto el modelo llamado sydney fue hecho por
     * Brian Collins.
     */
    IAnimatedMesh* mesh = smgr->getMesh("sydney.md2");
    IAnimatedMeshSceneNode* node =
            smgr->addAnimatedMeshSceneNode(mesh);

    /*
     * Para hacer que el modelo se vea un poco mejor,
     * cambiaremos las propiedades de su material un poco.
     *
     * Primero deshabilitaremos la iluminación porque no
     * contamos con una luz dinámica por el momento y el
     * modelo se vería totalmente oscuro.
     *
     * Después definiremos el ciclo de cuadros de animación,
     * para que se reproduzca entre los cuadros 0 y 310
     * una y otra vez.
     *
     * Por último le pondremos una textura al modelo. Sin
     * ella el modelo sería dibujado en pantalla usando
     * puro color.
     */
    if (node) {
        node->setMaterialFlag(EMF_LIGHTING, false);
        node->setFrameLoop(0,310);
        node->setMaterialTexture(0,
                driver->getTexture("sydney.bmp"));
    }

    /*
     * Para poder ver el modelo, colocaremos en el espacio
     * 3D una cámara en la posición (0, 30, -40). La cámara
     * verá desde ahí hacia (0, 5, 0).
     */
    smgr->addCameraSceneNode(0,
            vector3df(0, 30, -40), vector3df(0, 5, 0));

    /*
     * Bueno, ya con la escena lista, podemos dibujar todo.
     *
     * Ejecutaremos el dispositivo en un ciclo while() hasta
     * que éste ya no quiera correr más. Esto sería después
     * de que el usuario cierre la ventana o presione
     * ALT+F4.
     */
    while (device->run()) {

        /*
         * Todo se dibuja entre una llamada a beginScene()
         * y endScene().
         *
         * La llamada a beginScene() limpia la pantalla con
         * un color y también el buffer de profundidad si
         * así lo deseamos.
         *
         * Ya con un espacio en limpio, dejamos que el
         * administrador de escena y el ambiente GUI
         * dibujen su contenido.
         *
         * Finalmente con la llamada a endScene() todo es
         * presentado en pantalla.
         */
        driver->beginScene(true, true,
                SColor(255, 217, 194, 140));

        smgr->drawAll();
        guienv->drawAll();

        driver->endScene();
    }

    /*
     * Después de terminar, debemos eliminar el Irrlicht
     * Device creado anteriormente con createDevice().
     *
     * En Irrlicht tendrás que hacerte cargo de eliminar
     * todos los objetos que hayas creado con un método o
     * función que su nombre comience con 'create'.
     *
     * El objeto se elimina simplemente al llamar a su
     * método drop().
     */
    device->drop();

    return 0;
}

 

Si al ejecutar el programa recibes un error y no se despliega nada, es posible que al crear el dispositivo en modo software (EDT_SOFTWARE) con la función createDevice éste te de problemas.

Utiliza el modo EDT_OPENGL e intenta de nuevo.

Ejecutar el programa

botones-netbeans.jpg

Para ejecutar nuestro programa presionamos la tecla F6 o damos clic al tercer botón de los mostrados aquí (el verde).

  • El primer botón únicamente construye nuestro proyecto, es decir compila y enlaza los archivos que lo integran.
  • El segundo elimina todos los archivos generados (archivos objeto y el ejecutable) y reconstruye el proyecto.
  • El tercero lo que hace es: si el proyecto ha sido construido lo ejecuta, sino, lo construye y después lo ejecuta.

Finalmente debemos ver algo similar a esto:

hola-mundo.png

Lo que sigue

En la siguiente entrega de esta serie veremos cómo agregar a nuestra aplicación diferentes tipos de nodos y cómo modificar sus propiedades (posición, escala y rotación).

¡Hasta la próxima!

Referencias

Tutorial 1: HelloWorld
Irrlicht basics tutorial [Note: HUGE POST]

Artículos relacionados:

Páginas: 1 2

21 Responses to “Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo”

  1. Muy buena la nota, y hablando de Netbeans, se puede encargar un DVD gratis de NetBeans 6.1 (lleno de paquetes) y JDK 6. Trae tutoriales, screencasts y The Java Tutorial.

    http://snarvaez.com.ar/libertad/index.php/2008/05/08/order_your_free_netbeans_starter_kit_dvd_jdk6/

  2. Lobo tuerto MEXICO Linux Mozilla Firefox 3.0b5 dice:

    ¡Órale, eso suena más que excelente!

    Creo que pediré el mio. :D

  3. Programación de videojuegos con Irrlicht y NetBeans 6.1 en Ubuntu 8.04…

    ¿Quieres aprender a programar videojuegos pero no has encontrado información en español? Este es un artículo en una serie sobre desarrollo y programación de videojuegos con el excelente motor gráfico de código abierto Irrlicht. Cómo extra se us…

  4. meneame.net SPAIN dice:

    Programación de videojuegos con Irrlicht y NetBeans 6.1 en Ubuntu 8.04…

    ¿Quieres aprender a programar videojuegos pero no has encontrado mucha información en español? Este es un artículo en una serie sobre desarrollo y programación de videojuegos usando el excelente motor gráfico 3D de código abierto Irrlicht. Cómo…

  5. ludiko.com ARGENTINA dice:

    Programación de videojuegos con Irrlicht y NetBeans 6.1 en Ubuntu 8.04…

    Vota este post en ludiko.com…

  6. [...] Tutorial Irrlicht en NetBeans 6.1 Nos muestra como compilar un juego C++ con motor 3D irrlicht en NetBeans 6.1 [...]

  7. [...] Tutorial #1 de Irrlicht: Cómo compilar e instalar Irrlicht en Ubuntu 8.04 Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo [...]

  8. Javier I. COLOMBIA Debian GNU/Linux Mozilla Firefox 2.0.0.14 dice:

    Estoy trabajando con libusb una libreria escrita en C para comunicacion con puerto USB en Netbeans. Pero al darle la opcion build en el proyecto aparece algo como lo siguiente:

    gcc -o dist/Debug/GNU-Linux-x86/lsusb build/Debug/GNU-Linux-x86/main.o -lusb -lusb
    build/Debug/GNU-Linux-x86/main.o: In function `print_devs’:
    /root/NetBeansProjects/lsusb/main.c:31: referencia a `libusb_get_device_descriptor’ sin definir

    Ya agregué las librerias libusb.a y libusb.so, parece ser un problema con el Linker, puedes recomendarme algo para solucionar mi problema??? Gracias

  9. Lobo tuerto MEXICO Linux Mozilla Firefox 3.0 dice:

    Pues la única bronca que puedes tener con el linker es que éste no encuentre las definiciones de las funciones que está buscando.

    Asegúrate de tener en su lugar las bibliotecas de libusb.

  10. [...] Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo | Lobo tuerto El objetivo de este tutorial es configurar NetBeans para poder compilar desde ahí nuestras aplicaciones basadas en Irrlicht. Y crearemos nuestro primer programa usando este poderoso motor gráfico, así es, ¡un Hola Mundo con Irrlicht! (tags: netbeans c c++ programming irrlicht videogames) [...]

  11. sk COLOMBIA Linux Mozilla Firefox 3.0 dice:

    esto es lo que me sale :(

    Running “/usr/bin/make -f Makefile CONF=Debug” in /home/skarmiglione/NetBeansProjects/tutorial2

    /usr/bin/make -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
    make[1]: se ingresa al directorio `/home/skarmiglione/NetBeansProjects/tutorial2′
    mkdir -p build/Debug/GNU-Linux-x86
    gcc -c -g -o build/Debug/GNU-Linux-x86/main.o main.cpp
    main.cpp:420:10: aviso: no hay caractér de fin de línea al final del fichero
    main.cpp:3: error: expected unqualified-id before numeric constant
    In file included from /usr/include/c++/4.2/new:45,
    from /usr/local/include/irrAllocator.h:9,
    from /usr/local/include/irrString.h:9,
    from /usr/local/include/coreutil.h:8,
    from /usr/local/include/irrlicht.h:34,
    from main.cpp:4:
    /usr/include/c++/4.2/exception:40: error: expected declaration before end of line
    make[1]: *** [build/Debug/GNU-Linux-x86/main.o] Error 1
    make[1]: se sale del directorio `/home/skarmiglione/NetBeansProjects/tutorial2′
    make: *** [.build-impl] Error 2

    Build failed. Exit value 2.

  12. Lobo tuerto MEXICO Linux Mozilla Firefox 3.0.1 dice:

    Checa que no te haga falta algún punto y coma (;) después de la declaración de alguna de tus clases.

  13. Stanis PERU Windows Vista Internet Explorer 7.0 dice:

    Muy interesante los tips que presentas, y bueno, ahora ando revisando el codigo fuente de una herramienta llamada Open Proj y bueno quisiera poder usarla a la par del Netbeans 6.1 pero hasta el momento no puedo realizar eso, asi que les agradecería puedan ayudarme a encontrarme una solución.

    Saludos
    Stanis

  14. Lobo tuerto MEXICO Ubuntu Linux Mozilla Firefox 3.0.3 dice:

    @Stanis:
    Es la primera vez que escucho de ese software. Por lo que he leído es un administrador de proyectos al estilo del Project de Microsoft.
    Creo que lo mejor que puedes hacer es descargarlo y comenzar a “jugar” con él.

    Happy hacking! ;)

  15. sofoke MEXICO Ubuntu Linux Mozilla Firefox 3.0.3 dice:

    Irrlicht trae mayas por defecto?
    y si es asi cuales son?
    me refiero a personajes objetos escenario etc…

  16. lobo_tuerto MEXICO Ubuntu Linux Mozilla Firefox 3.0.3 dice:

    @sofoke:
    Trae varios archivos de ejemplo en la carpeta “media”.

    Ahí encontrarás texturas, meshes de ejemplo etc.

    Y el engine incluye cubos y esferas de ejemplo para hacer algún prototipo rápido de alguna idea.

  17. [...] #1 de Irrlicht: Cómo compilar e instalar Irrlicht en Ubuntu 8.04 Tutorial #2 de Irrlicht: Cómo configurar NetBeans 6.1 y hacer un Hola Mundo Tutorial #3 de Irrlicht: Cómo agregar y manipular nodos de escena en [...]

  18. Peixinho PORTUGAL Ubuntu Linux Mozilla Firefox 3.0.12 dice:

    where is the tutorial?

  19. lobo_tuerto MEXICO Ubuntu Linux Mozilla Firefox 3.0.12 dice:

    Thank you for the heads up, I’ll look into it later today.

    Seems like a problem with some divs and the gallery plugin… :(

  20. lobo_tuerto MEXICO Ubuntu Linux Mozilla Firefox 3.0.12 dice:

    Alright, it’s working!

    The guys that made this template didn’t consider including a “pages” link into it. :(

    But it’s fixed! :D

  21. javier BOLIVIA Ubuntu Linux Mozilla Firefox 3.0.13 dice:

    Estoy tratando de hacer built en NetBeans 6.7 y Ubuntu 9.04 para utilizar math.h pero no encuentro donde hacerlo. Si alguien me puede dar una mano. Muchas gracias

Leave a Reply

FireStats icon Con la potencia de FireStats