Introduccion a Programacion Grafica

download Introduccion a Programacion Grafica

of 6

Transcript of Introduccion a Programacion Grafica

  • 7/23/2019 Introduccion a Programacion Grafica

    1/6

    Introduccion a programacion grafca

    Vamos a empezar con la base de lo que ser nuestro motor 3D. Para ello, vamos a independizar la aplicacin del usode una librera grfica, ya sea pen!" o Direct#. Para ello nos aprovec$aremos del %&& para definir una clase'nterfaz con m(todos grficos cuya implementeacin, depender de qu( librera grfica queramos utilizar.

    Para llevar a cabo esta idea, usaremos lo que se denomina Polimorfismo Dinmico, que consiste en definir unpuntero a una clase padre, e instanciar un ob)eto de una clase $i)a. De esta forma, definiremos un puntero a laclase 'VideoDriver e instanciaremos un ob)eto de la clase pen!"VideoDriver o Direct#*VideoDriver.

    "a aplicacin traba)ar llamando a los m(todos declarados en la clase padre, pero implementados en las clases $i)ascon lo que de esta forma se puede usar una librera grfica u otra sin que tengamos que modificar el cdigo de laaplicacin.

    +al como $e diseado la clase de interfaz, slo se permite crear una instancia del Driver de Vdeo. -sto lo $e $ec$oas para poder definir una variable esttica que permite acceder al Driver de Vdeo desde cualquier clase de laforma 'VideoDriver!etVideoDriver/0, obteniendo el puntero que nos permite acceder a toda su funcionalidad.

    1i esta limitacin no se a)usta a vuestros propsitos, pod(is modificar la clase de forma que se puedan crear tantasinstancias del Driver de Vdeo como queris.

    2i)aros en una cosa, los constructores de las clases pen!"VideoDriver y Direct#*VideoDriver 1 P4'V5D1. -stosignifica que no pod(is crear ob)etos de dic$as clases de forman directa, no pod(is $acer -6. -ntonces, 7cmo secrean las instancias8.

    2i)os, que en el .$ de pen!"VideoDriver y Direct#*VideoDriver aparece la siguiente sentencia

    classpen!"VideoDriver public'VideoDriver 9 friend class'VideoDriver: ///< IVideoDriver es amiga de la clase, ya que crear sus instancias.

    esto supone que la clase 'VideoDriver es amiga de la clase que la declara y por tanto puede acceder a sus miembrosprivados, tanto el constructor como el destructor.

    %on esto, se definen los m(todos estticos

    ////////////////////////////////////////////////////////////////////////////////// CreateInstance: Crea una instancia del Driver de Vdeo.////// @param eVID!"D#IV!# $indVideoDriver: %ipo de li&rera de la que se/// o&tendr la instancia:/// ' e"pen() : "pen()./// ' eDirect*+ : Direct* +./// @param e*I---%! a0is-ystem: -istema de e1es coordenados:

  • 7/23/2019 Introduccion a Programacion Grafica

    2/6

    /// ' e#ig2t3anded : -istema de mano derec2a, como en "pen()./// ' e)e4t3anded : -istema de mano i5quierda, como en Direct*.////// @return static IVideoDriver 6: Instancia del Driver de Vdeo.///////////////////////////////////////////////////////////////////////////////

    staticIVideoDriver * CreateInstance( e_VIDEO_DRIVER kindVideoDriver,

    e_AXIS_SYSTEM axisSste! "#

    ////////////////////////////////////////////////////////////////////////////////// #elease: 7inali5a la li&rera gr4ica.////// @param IVideoDriver 6 pIVideoDriver: Instancia del Driver de Vdeo a li&erar.////// @return int:/// ' '8 : error./// ' otro: correcto.///////////////////////////////////////////////////////////////////////////////

    static intRe$ease(IVideoDriver * %IVideoDriver"#

    que son los que crearn una instancia de cada clase $i)a. "a implementacin de dic$os m(todos se encuentra en losfic$eros direct;videodriver.cpp y openglvideodriver.cpp. 1e podra $aber metido en un fic$ero ivideodriver.cpp, perolo $e $ec$o as, para que la instanciacin de Direct# sea independiente de la de pen!" y as cuando se deseacompilar para pen!" no $ace falta enlazar con las libreras de Direct#.

    CONFIGURACIN DE ENTORNOS

    DIRECTX:

    Para desarrollar con Direct#, pod(is usar Visual o Dev

  • 7/23/2019 Introduccion a Programacion Grafica

    3/6

    1i al e)ecutar el e)emplo, os dice que no encuentra la dll, buscad en %=>directorio instalacion Dev

  • 7/23/2019 Introduccion a Programacion Grafica

    4/6

    -n la opciones del proyecto deb(is declarar el define HHD'4-%+H#HH y enlazar con las libreras d3d*.lib d3d;*.libd;err*.lib advapi3A.lib user3A.lib Iinmm.lib gdi3A.lib.

  • 7/23/2019 Introduccion a Programacion Grafica

    5/6

    O#ENG&:

    -n el caso de pen!", deb(is declarar el define HH6'HP-H!"HH y enlazar con las libreras opengl3A.libglu3A.lib Jernel3A.lib user3A.lib gdi3A.lib.

    Para Dev C++:

  • 7/23/2019 Introduccion a Programacion Grafica

    6/6

    Para Visual C: