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 + Modelos 3D Max

    es un poco pesado 1.66  Gb , pero vale la pena, ademas de ser curso para el 3dmax 2009, no es la ultima version pero se ve muy bien.  INTERCAMBIABLES http://www.storage.to/get/oSKa4RUI/Curso3dsMx2009byultrablanco85.part01.rar   http://www.storage.to/get/cU6pomba/Curso3dsMx2009byultrablanco85.part02.rar   http://www.storage.to/get/zUEodx6k/Curso3dsMx2009byultrablanco85.part03.rar   http://www.storage.to/get/aOKZ8jSl/Curso3dsMx2009byultrablanco85.part04.rar   http://www.storage.to/get/xcEWst5k/Curso3dsMx2009byultrablanco85.part05.rar   http://www.storage.to/get/PMNryNdS/Curso3dsMx2009byultrablanco85.part06.rar   http://www.storage.to/get/g4N2WmTb/Curso3dsMx2009byultrablanco85.part07.rar   http://www.storage.to/get/ONYl2qzI/Curso3dsMx2009byultrablanco85.part08.rar   http://www.storage.to/get/ENgVT10L/Curso3dsMx2009byultrablanco85.part09.rar   http://rapidshare.com/files/290793282/Curso3dsMx2009byultrablanco85.part01.rar   http://rapidshare.com/files/290790014/Curso3dsMx2009byultra

    Casa V / Plan B

    Vista aérea Ubicación:  Urbanización Aposentos, Sabana de Bogotá, Colombia Arquitectos: Plan B Arquitectos (Felipe Mesa) + Giancarlo Mazzanti Arquitectos Colaboradores:  Viviana Peña, Jose Orozco, Jaime Borbón, Andrés Sarmiento, Juan Pablo Buitrago Constructor:  Jaime Pizarro Ingeniero Calculista:  Nicolás Parra Diseño:  2006-2007 Construcción:  2008-2009 AnigraficS3D © Rodrigo Dávila Casa para disfrutar de un jardín nativo y de la vista lejana de un humedal. Municipio de Sopó, en cercanías a Bogotá. a. Riesgos Desplegar la casa a lo largo de la alta inclinación del solar, evitando la presencia volumétrica en favor de una extensión horizontal ramificada. Vincular la configuración molecular deformable del vidrio con la disposición geométrica de la casa. Ensayos Vidrios Esquemas b. Geometría La estructura molecular del vidrio, flexible, deformable y modular definirá la estrategia geométrica de la planta y de las transformaciones que ocurren en el proceso de diseño. Los hec