google.com, pub-1013500553222423, DIRECT, f08c47fec0942fa0 Ir al contenido principal

Programación Gráfica CAPITULO 4

Inicialización del Driver de Vídeo. 

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:


  • Comentarios

    Entradas populares de este blog

    Audaces vestuario 7.0 [Español] [Moda]

    Archivo 95 mb aprox idioma español Requisitos WinXP El sistema Audaces Vestuario es la solución para la industria de la confección, desarrollado especialmente para agilizar los procesos de Diseño, Escalado, Trazo y Corte. Se compone de dos módulos, uno de Patrones y uno de Trazo. Patrones Audaces Patrones es un modulo realmente fácil de utilizar. El diseñador crea los moldes directamente en la pantalla del computador,sin uso de la mesa digitalizadora, de una forma rapida y eficiente,usando las innumerables herramientas de diseño disponibles.Adicionalmente, proporcionara la creación de moldes base dentro de los estándares técnicos de la industria, o sea con tablas de medidas,áreas de costura acondicionadas a los equipos de producción, estudios de encogimientos, etc. Escalado En Audaces Patrones se escalan los moldes con facilidad, precisión rapidez y seguridad. Trazo Audaces Trazo elabora Trazos con excelente aprovechamiento en pocos minutos. A través del Trazo automático, y pe...

    3DS Max 2009 + Texturas

    Megapost 3DS Max 2009 + Texturas Autodesk 3ds Max 2009 32/64-bit Incluye Clave y Activador Descripcion del Programa: Autodesk ha lanzado recientemente dos nuevas versiones de 3Ds MAX: 3Ds MAX 2009 y 3Ds MAX Design 2009. Muchos usuarios se han sorprendido con este lanzamiento, ya que han pasado pocos meses desde la aparición de 3Ds MAX 2008 (octubre del 2007) y porque ahora se trata de dos programas, cuyas diferencias las analizaremos a continuación. 3Ds MAX 2009 es la evolución lógica de las versiones previas de max, en cambio 3ds Max design se trataría de un nuevo producto ¿?, el cual reemplazará al ahora extinto Autodesk Viz (era una versión light del mismo 3ds MAX). En general se trata del mismo software, con las mismas funciones y herramientas, las únicas excepciones es que 3Ds MAX viene con SDK (Kit para desarrolladores), lo que no trae Max Design, en compensación, Max Design incorpora una tecnología exclusiva de análisis de iluminación llamada Exposure, que sirve para tener una s...

    AUTOCAD APLICADO A LA TOPOGRAFIA

    http://es.scribd.com/doc/38078452/AutoCAD-Aplicado-a-La-Topografia