Aprende a desarrollar aplicaciones gráficas 2D y 3D paso a paso.
Programacion Grafica: Desarrollo 2D/3D con C++ y DirectX/OpenGL/GLUT/SDL - Windows/Linux


  Crear una cuenta
 • Portada • Descargas • Tu Cuenta • 
Menú
 Portada
 Noticias
 Archivo de Noticias
 Temas
 Descargas
 Inicio
 Ver Nuevas
 Más Popular
 Más Votadas
 Contenido
 Contenido
 Secciones
 Enciclopedia
 Revisiones
 FAQ
 Tus Opciones
 Tu Cuenta
 Mensajes Privados
 Recomiéndenos
 Buscar
 Diarios
 Contacto
 Enlaces Web
 Inicio
 Enviar Enlace
 Ver Nuevos
 Más Popular
 Más Valorados
 Estadísticas
 Inicio
 Detalladas
 Top 10
 
Estadísticas
 
Tutorial 03 - Inicialización del Driver de Vídeo. 
DirectX/Opengl

Vamos a empezar con la base de lo que será nuestro motor 3D. Para ello, vamos a independizar la aplicación del uso de una librería gráfica, ya sea OpenGL o DirectX. Para ello nos aprovecharemos del C++ para definir una clase Interfaz con métodos gráficos cuya implementeación, dependerá de qué librería gráfica queramos utilizar.



Para llevar a cabo esta idea, usaremos lo que se denomina Polimorfismo Dinámico, que consiste en definir un puntero a una clase padre, e instanciar un objeto de una clase hija. De esta forma, definiremos un puntero a la clase IVideoDriver e instanciaremos un objeto de la clase OpenGLVideoDriver o DirectX9VideoDriver.

La aplicación trabajará llamando a los métodos declarados en la clase padre, pero implementados en las clases hijas con lo que de esta forma se puede usar una librería gráfica u otra sin que tengamos que modificar el código de la aplicación.

Tal como he diseñado la clase de interfaz, sólo se permite crear una instancia del Driver de Vídeo. Esto lo he hecho así para poder definir una variable estática que permite acceder al Driver de Vídeo desde cualquier clase de la forma: IVideoDriver::GetVideoDriver(), obteniendo el puntero que nos permite acceder a toda su funcionalidad.

Si esta limitación no se ajusta a vuestros propósitos, podéis modificar la clase de forma que se puedan crear tantas instancias del Driver de Vídeo como queráis.

Fijaros en una cosa, los constructores de las clases OpenGLVideoDriver y DirectX9VideoDriver SON PRIVADOS. Esto significa que no podéis crear objetos de dichas clases de forman directa, no podéis hacer NEW. Entonces, ¿cómo se crean las instancias?.

Fijáos, que en el .h de OpenGLVideoDriver y DirectX9VideoDriver aparece la siguiente sentencia:


    class OpenGLVideoDriver : public IVideoDriver
    {
        friend class IVideoDriver;	///< IVideoDriver es amiga de la clase, ya que creará sus instancias.


esto supone que la clase IVideoDriver es amiga de la clase que la declara y por tanto puede acceder a sus miembros privados, tanto el constructor como el destructor.

Con esto, se definen los métodos estáticos:


///////////////////////////////////////////////////////////////////////////////
///     CreateInstance: Crea una instancia del Driver de Vídeo.
///
///     @param  e_VIDEO_DRIVER kindVideoDriver: Tipo de librería de la que se 
///                 obtendrá la instancia:
///                     - eOpenGL   : OpenGL.
///                     - eDirectX9 : DirectX 9.
///     @param  e_AXIS_SYSTEM axisSystem: Sistema de ejes coordenados:
///                     - eRightHanded  : Sistema de mano derecha, como en OpenGL.
///                     - eLeftHanded   : Sistema de mano izquierda, como en DirectX.
///
///     @return  static IVideoDriver *: Instancia del Driver de Vídeo.
///////////////////////////////////////////////////////////////////////////////
static IVideoDriver * CreateInstance( e_VIDEO_DRIVER kindVideoDriver,
                                      e_AXIS_SYSTEM axisSystem );

///////////////////////////////////////////////////////////////////////////////
///     Release: Finaliza la librería gráfica.
///
///     @param  IVideoDriver * pIVideoDriver: Instancia del Driver de Vídeo a liberar.
///
///     @return  int:   
///                     - -1  : error.
///                     - otro: correcto.
///////////////////////////////////////////////////////////////////////////////
static int Release(IVideoDriver * pIVideoDriver);

que son los que crearán una instancia de cada clase hija. La implementación de dichos métodos se encuentra en los ficheros directxvideodriver.cpp y openglvideodriver.cpp. Se podría haber metido en un fichero ivideodriver.cpp, pero lo he hecho así, para que la instanciación de DirectX sea independiente de la de OpenGL y así cuando se desea compilar para OpenGL no hace falta enlazar con las librerías de DirectX.

CONFIGURACIÓN DE ENTORNOS

DIRECTX:

Para desarrollar con DirectX, podéis usar Visual o Dev-C++.

Para trabajar con Dev-C++, teneís que descargaros el paquete de desarrollo DirectX9.DevPak e instalarlo.

Tenéis que añadir las siguientes opciones al proyecto para compilar con DirectX:


Si al ejecutar el ejemplo, os dice que no encuentra la dll, buscad en C:/[directorio instalacion Dev-Cpp]/DLL y veréis que hay unas dll''s. Copiaros el fichero d3dx9d.dll al directorio bindx donde se genera el ejecutable, o si no queréis que os pida siempre el fichero, lo copiais al directorio C:/WINDOWS/system32 y os debería funcionar.

Para desarrollar con Visual, tenéis que descargaros el SDK DirectX 9c y configurar los entornos:



En el caso de Visual C 6.0 es MUY IMPORTANTE que los directorios de DirectX estén los primeros, porque debe enlazar con ciertas librerías en lugar de las que vienen por defecto.

Para Visual C 2005:



En la opciones del proyecto debéis declarar el define __DIRECT_X__ y enlazar con las librerías: d3d9.lib d3dx9.lib dxerr9.lib advapi32.lib user32.lib winmm.lib gdi32.lib.


OPENGL:

En el caso de OpenGL, debéis declarar el define __WIN_OPEN_GL__ y enlazar con las librerías: opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib.

  • Para Dev C++:
  • Para Visual C:
  • Descargaros el ejemplo para ver el código: tutorial-03.zip



    Nota: Compartir en Facebook
    Enviado el Miércoles, 29 agosto a las 20:03:43 por administrador
     
    Enlaces Relacionados
    · Más Acerca de DirectX/Opengl
    · Noticias de administrador


    Noticia más leída sobre DirectX/Opengl:
    Tutorial 16 - Movimiento-3D - (Tercera Persona)

     
    Votos del Artículo
    Puntuación Promedio: 5
    votos: 3


    Por favor tómate un segundo y vota por este artículo:
    Excelente
    Muy Bueno
    Bueno
    Regular
    Malo

     
    Opciones

     Versión Imprimible  Versión Imprimible

     
    "Tutorial 03 - Inicialización del Driver de Vídeo." | Entrar / Crear Cuenta | 0 Comentarios
    Los comentarios son propiedad de quien los envió. No somos responsables por su contenido.

    No se permiten comentarios Anónimos, Regístrese por favor

    Sitio potenciado por NukeProjects.Net        NukeStilo 1.0 se basa en PHP-Nuke        Theme Diseñado por NukeMods

    © Antonio Lucas Moreno