desarrollo videojuegos 1 arquitectura del motor de videojuegos

Click here to load reader

Post on 03-Jan-2016

79 views

Category:

Documents

6 download

Embed Size (px)

TRANSCRIPT

  • ABCDEFEBDEEE

  • DDBBBABDDBBDABABCDEFEBDEEECDEF ! "" #$% &'ABCBDBEFBFFA(CDEF ! "" #$%" "FDBDF )*B+'AB(,*DBD-BD'FDFB( ABCDEFEDB.BEFBDBBA DB.BEFBDB

    /*DB0B12BBE,342DDE2EDB.BEFBDB5DB.DBED-,2BDED0DBE6BE.789)ED97E+52:2E:00-

    AAB ABA;*DB2D9D*DB1ED2B B*D 1ED2? 2BD BD B EBD- @- AB B1D- AB 2 D B*D 2D ?EB1D-&-5EB*DD-AB2DD9 DE0BD1DBEDDEB*DD2DDB*D-FE0BD1BEEC2DDDB11BE-BDDED* E ED&-$D

  • ABABACDEDCFBACAABBAADD EDCFBBACB A B!" #$ C%& DFDD'DC BABACD A DE(CA A )CBD *+, DFD FAADC A -.'AA A -BBDA -C DB "/ A -CDAD ,A%B/ ) ' CA'BADBAF%DA012"B'3DFDAACCDDA-BBDA%ACAAADF-'DCABAFBCB%'BD/

    CDEF 4 ,DDC )'CD-AD A EDCFBBACB A B!" #$ A 5CDEADC'A,DDCABF-CADABA)'AAEDCFB A B' *A "$ A B'CCABDD EDCFB0CEB5CDCFB6BAF 7-ACBD AA 8/ 'FAA 'BB BABDC BC A DCD 9BBBABAA D 6BAF'B!AA A *AACB,BCB%'BD/

  • Prefacio

    Este libro forma parte de una coleccin de cuatro volmenes dedi-cados al Desarrollo de Videojuegos. Con un perfil principalmente tcni-co, estos cuatro libros cubren los aspectos esenciales en programacinde videojuegos:

    1. Arquitectura del Motor. En este primer libro se estudian losaspectos esenciales del diseo de un motor de videojuegos, ascomo las tcnicas bsicas de programacin y patrones de diseo.

    2. Programacin Grfica. El segundo libro de la coleccin se centraen los algoritmos y tcnicas de representacin grfica y optimiza-ciones en sistemas de despliegue interactivo.

    3. Tcnicas Avanzadas. En este tercer volumen se recogen ciertosaspectos avanzados, como estructuras de datos especficas, tc-nicas de validacin y pruebas o simulacin fsica.

    4. Desarrollo de Componentes. El ltimo libro est dedicado aciertos componentes especficos del motor, como la InteligenciaArtificial, Networking, Sonido y Multimedia o tcnicas avanzadasde Interaccin.

    Sobre este libro...

    Este libro que tienes en tus manos es una ampliacin y revisinde los apuntes del Curso de Experto en Desarrollo de Videojuegos, im-partido en la Escuela Superior de Informtica de Ciudad Real de laUniversidad de Castilla-La Mancha. Puedes obtener ms informacinsobre el curso, as como los resultados de los trabajos creados por losalumnos en la web del mismo: http://www.esi.uclm.es/videojuegos.

    La versin electrnica de este manual (y del resto de libros de lacoleccin) puede descargarse desde la web anterior. El libro fsicopuede adquirirse desde la pgina web de la editorial online Bubok enhttp://www.bubok.es.

  • Requisitos previos

    Este libro tiene un pblico objetivo con un perfil principalmentetcnico. Al igual que el curso del que surgi, est orientado a la capac-itacin de profesionales de la programacin de videojuegos. De estaforma, este libro no est orientado para un pblico de perfil artstico(modeladores, animadores, msicos, etc) en el mbito de los videojue-gos.

    Se asume que el lector es capaz de desarrollar programas de nivelmedio en C y C++. Aunque se describen algunos aspectos clave de C++a modo de resumen, es recomendable refrescar los conceptos bsicoscon alguno de los libros recogidos en la bibliografa del curso. De igualmodo, se asume que el lector tiene conocimientos de estructuras dedatos y algoritmia. El libro est orientado principalmente para titula-dos o estudiantes de ltimos cursos de Ingeniera en Informtica.

    Programas y cdigo fuente

    El cdigo de los ejemplos del libro pueden descargarse en la si-guiente pgina web: http://www.esi.uclm.es/videojuegos. Salvo quese especifique explcitamente otra licencia, todos los ejemplos del librose distribuyen bajo GPLv3.

    Agradecimientos

    Los autores del libro quieren agradecer en primer lugar a los alum-nos de la primera edicin del Curso de Experto en Desarrollo de Video-juegos por su participacin en el mismo y el excelente ambiente en lasclases, las cuestiones planteadas y la pasin demostrada en el desa-rrollo de todos los trabajos.

    De igual modo, se quiere reflejar el agradecimiento especial al per-sonal de administracin y servicios de la Escuela Superior de Infor-mtica, por su soporte, predisposicin y ayuda en todos los capri-chosos requisitos que plantebamos a lo largo del curso.

    Por otra parte, este agradecimiento tambin se hace extensivo ala Escuela de Informatica de Ciudad Real y al Departamento de Tec-nologas y Sistema de Informacin de la Universidad de Castilla-LaMancha.

    Finalmente, los autores desean agradecer su participacin a loscolaboradores de esta primera edicin: Indra Software Labs, la aso-ciacin de desarrolladores de videojuegos Stratos y a Libro Virtual.

  • Resumen

    El objetivo de este mdulo, titulado Arquitectura del Motor dentrodel Curso de Experto en Desarrollo de Videojuegos, es introducir losconceptos bsicos relativos a las estructuras y principios de diseoy desarrollo comnmente empleados en la creacin de videojuegos.Para ello, uno de los principales objetivos es proporcionar una visingeneral de la arquitectura general de un motor de juegos.

    Dentro del contexto de esta arquitectura general se hace especialhincapi en aspectos como los subsistemas de bajo nivel, el bucle dejuego, la gestin bsica de recursos, como el sonido, y la gestin de laconcurrencia. Para llevar a cabo una discusin prctica de todos estoselementos se hace uso del motor de renderizado Ogre3D.

    Por otra parte, en este primer mdulo tambin se estudian los fun-damentos del lenguaje de programacin C++ como herramienta funda-mental para el desarrollo de videojuegos profesionales. Este estudio secomplementa con una discusin en profundidad de una gran variedadde patrones de diseo y de la biblioteca STL. Adems, tambin se rea-liza un recorrido por herramientas que son esenciales en el desarrollode proyectos software complejos, como por ejemplo los sistemas decontrol de versiones, o procesos como la compilacin o la depuracin.

    I

  • ndice general

    1. Introduccin 1

    1.1. El desarrollo de videojuegos . . . . . . . . . . . . . . . . . 1

    1.1.1. La industria del videojuego. Presente y futuro . . . 1

    1.1.2. Estructura tpica de un equipo de desarrollo . . . . 3

    1.1.3. El concepto de juego . . . . . . . . . . . . . . . . . . 6

    1.1.4. Motor de juego . . . . . . . . . . . . . . . . . . . . . 8

    1.1.5. Gneros de juegos . . . . . . . . . . . . . . . . . . . 9

    1.2. Arquitectura del motor. Visin general . . . . . . . . . . . 15

    1.2.1. Hardware, drivers y sistema operativo . . . . . . . 16

    1.2.2. SDKs y middlewares . . . . . . . . . . . . . . . . . . 17

    1.2.3. Capa independiente de la plataforma . . . . . . . . 18

    1.2.4. Subsistemas principales . . . . . . . . . . . . . . . 18

    1.2.5. Gestor de recursos . . . . . . . . . . . . . . . . . . . 19

    1.2.6. Motor de rendering . . . . . . . . . . . . . . . . . . . 20

    1.2.7. Herramientas de depuracin . . . . . . . . . . . . . 23

    1.2.8. Motor de fsica . . . . . . . . . . . . . . . . . . . . . 23

    1.2.9. Interfaces de usuario . . . . . . . . . . . . . . . . . 24

    1.2.10.Networking y multijugador . . . . . . . . . . . . . . 25

    1.2.11.Subsistema de juego . . . . . . . . . . . . . . . . . . 25

    1.2.12.Audio . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    1.2.13.Subsistemas especficos de juego . . . . . . . . . . 28

    2. Herramientas de Desarrollo 29

    III

  • 2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    2.2. Compilacin, enlazado y depuracin . . . . . . . . . . . . 30

    2.2.1. Conceptos bsicos . . . . . . . . . . . . . . . . . . . 31

    2.2.2. Compilando con GCC . . . . . . . . . . . . . . . . . 33

    2.2.3. Cmo funciona? . . . . . . . . . . . . . . . . . . . . 34

    2.2.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . 36

    2.2.5. Otras herramientas . . . . . . . . . . . . . . . . . . 42

    2.2.6. Depurando con GNU GDB . . . . . . . . . . . . . . 42

    2.2.7. Construccin automtica con GNU Make . . . . . . 49

    2.3. Gestin de proyectos y documentacin . . . . . . . . . . . 54

    2.3.1. Sistemas de control de versiones . . . . . . . . . . 55

    2.3.2. Documentacin . . . . . . . . . . . . . . . . . . . . . 60

    2.3.3. Forjas de desarrollo . . . . . . . . . . . . . . . . . . 63

    3. C++. Aspectos Esenciales 67

    3.1. Utilidades bsicas . . . . . . . . . . . . . . . . . . . . . . . 67

    3.1.1. Introduccin a C++ . . . . . . . . . . . . . . . . . . 67

    3.1.2. Hola Mundo! en C++ . . . . . . . . . . . . . . . . . 68

    3.1.3. Tipos, declaraciones y modificadores . . . . . . . . 69

    3.1.4. Punteros, arrays y estructuras . . . . . . . . . . . . 70

    3.1.5. Referencias y funciones . . . . . . . . . . . . . . . . 74

    3.2. Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    3.2.1. Fundamentos bsicos . . . . . . . . . . . . . . . . . 78

    3.2.2. Aspectos especficos de las clases . . . . . . . . . . 80

    3.2.3. Sobrecarga de operadores . . . . . . . . . . . . . . . 85

    3.3. Herencia y polimorfismo . . . . . . . . . . . . . . . . . . . 88

    3.3.1. Herencia . . . . . . . . . . . . . . . . . . . . . . . . . 88

    3.3.2. Herencia mltiple . . . . . . . . . . . . . . . . . . . 91

    3.3.3. Funciones virtuales y polimorfismo . . . . . . . . . 95

    3.4. Plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    3.4.1. Caso de estudio. Listas . . . . . . . . . . . . . . . . 100

    3.4.2. Utilizando plantillas en C++ . . . . . . . . . . . . . 102

    3.4.3. Cundo utilizar plantillas? . . . . . . . . . . . . . 104

    3.5. Manejo de excepciones . . . . . . . . . . . . . . . . . . . . 105

    3.5.1. Alternativas existentes . . . . . . . . . . . . . . . . 105

  • 3.5.2. Excepciones en C++ . . . . . . . . . . . . . . . . . . 107

    3.5.3. Cmo manejar excepciones adecuadamente? . . . 110

    3.5.4. Cundo uti

View more