Code Monkey home page Code Monkey logo

mvid04_advanced_game_programming's People

Contributors

jmvazq avatar

Stargazers

 avatar

Watchers

 avatar

mvid04_advanced_game_programming's Issues

FINAL PROJECT: Game

Implementar un juego de naves con gráficos en 3D y mecánicas en 2D con scroll vertical, con el motor desarrollado durante la asignatura. Con mecánicas, sistema de juego y perspectiva similares a Terra Cresta 3D https://www.youtube.com/watch?v=kmcxF_OIoew

La mecánica del juego permitirá al jugador manejar una nave que sobrevuela un terreno, y donde aparecen naves enemigas que le disparan. El jugador podrá disparar y si sus disparos alcanzan las naves enemigas estas se destruirán. También aparecerán algunos meteoritos que no podrán ser destruidos y el jugador deberá esquivarlos. Todos los elementos de juego (jugador, enemigos, meteoritos) están en el mismo plano sobre el suelo. Si el jugador es alcanzado por un proyectil enemigo o un meteorito entonces su nave es destruida y pierde una vida.

El juego deberá mostrar una nave 3D para el jugador, al menos dos tipos de enemigos distintos (con naves distintas), al menos un tipo de meteorito, y un suelo. Los modelos 3D se pueden conseguir facilmente de las webs de recursos vistas durante el curso. Todos los objetos deberán proyectar sombras sobre el suelo (introducir una luz cenital que se mueva con la nave del jugador). Las naves deberán mostrar algo de deriva cuando se muevan lateralmente (roll), pero siempre se moverán en el mismo plano 2D. Los meteoritos deberán rotar sobre sí mismos para dar la impresión de movimiento al acercarse al jugador. Se debe usar el modelo de iluminación Phong Blinn, con mapas difusos y speculares, así como normal mapping. Los proyectiles del jugador y de los enemigos pueden ser formas simples o modelos complejos. La nave del jugador no podrá salir de la pantalla visible en el eje X, y solo un poco de libertad en el eje Y.

El juego deberá ser jugable un mínimo de 5 minutos (evitar memory leaks, corrupción de memoria, ....).

Posibles ampliaciones:

Los movimientos de la nave del jugador pueden tener cierta inercia, para simular el uso de físicas.
Al explotar los enemigos o la nave del jugador se puede implementar un sistema de partículas para simular una explosión o la desintegración de las naves.
Implementar un sistema de puntuación por naves destruidas.
Sistema de vidas para el jugador.
Mostrar textos 2D en pantalla con la puntuación o vidas restantes.
Sistema de powerups, al eliminar ciertas naves especiales (o un conjunto de ellas), pueden dejar algún item, que al cogerlo el jugador mejora su velocidad o capacidad de disparo.
Implementar oleadas de enemigos, que sigan ciertas trayectorias simples o incluso con curvas beizer o splines.
Montar un enemigo final más grande y poderoso.
Varios tipos de disparo, balas, rayos, ...
Hacer que algunos enemigos al ser alcanzados en lugar de explotar caigan al suelo y exploten allí.
Freestyle!!! Be creative!!!
El entregable consistirá en un archivo comprimido del proyecto con los fuentes desarrollados, los fuentes de las librerias y el script de lua, así como la libreria Assimp compilada, todo en sus correspondientes carpetas. Así que en este caso, solo hay que incluir las carpetas include, lib y src, y el fichero genie.lua de la raiz de los proyectos, así como todos los assets necesarios para la ejecución (texturas, modelos ....) y los shaders usados. Se adjuntará también un pequeño documento con la arquitectura de motor empleada con su diagrama, y un postmortem del desarrollo (https://blog.codinghorror.com/game-development-postmortems). Se recomienda adjuntar un pequeño video del juego en ejecución por si fuera imposible recompilar el proyecto por alguna causa.

AG_09: Loading Models, Assimp

Sobre la base de la actividad AG9 implementar un proyecto:

  1. Carga de modelos con Assimp, y pintar el modelo OBJ adjunto.

El proyecto en ejecución mostrará las escena solicitadas. Tal como se explica en el tema de Carga de Modelos y se ha visto en el video AG9 durante la clase VC9.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

AG3: Shaders

Sobre la base de la actividad AG3 implementar:

  • Implementar la clase Shader, que cargue los fuentes de los shaders de vertices y fragmentos de disco, los compile y linke, verifique errores y gestione la subida de uniforms
  • Añadir el atributo de color al ejemplo anterior del triángulo básico
  • Modificar los shaders para usar ese atributo de color y guardarlos como ficheros independientes
  • Pintar el triángulo con los colores interpolados

El proyecto en ejecución mostrará un triángulo en pantalla con los tres vertices cada uno de un color, y el resto del contenido del triángulo con los colores interpolados. Tal como se explica en el tema 1.6 del manual teórico y se ha visto en el video AG3 durante la clase VC3.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

AG_04: Textures

Sobre la base de la actividad AG3 implementar:

  • Implementar la lectura de texturas desde ficheros de disco
  • Añadir el atributo de coordenada de textura a los vértices del ejemplo del quad
  • Subir dos texturas a la GPU y configurarlas correctamente
  • Usar las dos texturas para pintarlas mezcladas en el cuadrado

EJ03_02

Cambiar el color del triángulo con el paso del tiempo, usando un uniform para ello y la función glfwGetTime(), que mide el tiempo que ha transcurrido desde que se inició GLFW.

AG_011: Normal/Bump Mapping

Sobre la base de la actividad AG11 implementar dos proyectos.

  • En una escena con un quad vertical, usar el modelo de iluminacion Blinn con normal mapping, con la texturas adjuntas, moviendo la luz alrededor del quad.
  • Pintar dos quads verticales, uno al lado del otro, uno con normal mapping y el otro solo con el mapa difuso y specular, moviendo la luz alrededor de los quads.

El proyecto en ejecución mostrará las escenas solicitadas. Tal como se explica en el tema de Normal Mapping y se ha visto en el video AG11 durante la clase VC11.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

AG_10: Depth-Testing, Stencil & Blending

Sobre la base de la actividad AG10 implementar tres proyectos.

  • En una escena con un Quad como suelo y tres cubos encima a diferentes distancias con el modelo de iluminación Blinn con mapas difusos y speculares. Pintar primero los cubos más cercanos a la cámara, y usando el depth testing hacer que el 3D se vea correctamente.
  • En la misma escena anterior y usando el stencil testing pintar un borde a los tres cubos.
  • En la misma escena, añadir un Quad delante del primer cubo, y sobre ese quad pintar la textura del árbol adjunta, y usando el blending correcto conseguir que se vea solo el árbol y no todo el quad.

El proyecto en ejecución mostrará las escena solicitadas. Tal como se explica en el tema de Depth, Stencil y Blending y se ha visto en el video AG10 durante la clase VC10.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

EJ02_02

Pintar los dos mismos triángulos usando dos VAOs y VBOs diferentes para sus datos.

EJ02_05

Pintar un hexágono centrado en la pantalla, usando un VAO, VBO y EBO, generando los vértices de la manera habitual a mano.

EJ04_02

Sin usar el flip de la libreria stb al leer la textura, implementar el flip vertical en el fragment shader directamente (usar una imagen que se vea claramente que está al reves como referencia para verificar que funciona).

EJ04_05

Pintar el quad con dos texturas interpoladas, y controlar el valor de la interpolación entre ambas con el teclado.

AG_06: Lighting

Sobre la base de la actividad AG6 implementar:

  • Establecer una escena básica con dos cubos, uno hará el rol de punto de luz y se pintará siempre blanco, el otro hará el rol de receptor de la luz.
  • Implementar el modelo de iluminación Phong con Ambient + Diffuse + Specular sobre el cubo receptor de la luz.

El proyecto en ejecución mostrará la escena solicitada. Tal como se explica en el tema 1.10 del manual teórico y se ha visto en el video AG6 durante la clase VC6.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

EJ03_03

Mover el triángulo a lo largo de la pantalla con el paso del tiempo, usando un uniform para ello.

AG1: Base Project

Implementar el proyecto base del curso, a partir del cual se van a desarrollar todos los contenidos.

  • La estructura de carpetas básica
  • Incluyendo todas las librerias de terceros necesarias (GLFW, GLAD, GLM)
  • Crear el script de Lua para generar la solución de VS2017 con Genie
  • Desarrollar el código en C++ necesario para iniciar el contexto de render, la ventana, las funciones de OpenGL, manejar el viewport, el input de teclado para cerrar la ventana, un main loop simple, y por último limpiar la pantalla.
  • El proyecto en ejecución mostrará una ventana de un tamaño determinado, con un color de fondo determinado y se cerrará al pulsar la tecla ESC. Tal como se explica en el tema 1.3 del manual teórico, y se ha visto en el video AG1 durante la clase VC1.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include, src y tests, y el fichero genie.lua de la raiz del proyecto. También es aceptable un enlace a un repositorio de código (GitHub, GitLab, ...).

AG_12: Framebuffers, Postprocessing

Sobre la base de la actividad AG12 implementar dos proyectos.

  • Pintar una escena a textura usando FBO, y luego usar esa textura para pintar a un quad que cubra toda la pantalla.
  • Con esa misma escena, implementar todos los shaders de postprocesos implementados en el video.

El proyecto en ejecución mostrará las escenas solicitadas. Tal como se explica en el tema de FBO y PostProcess y se ha visto en el video AG12 durante la clase VC12.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

EJ03_01

Dibujar el triángulo boca abajo, usando los vértices de los ejemplos anteriores, tocando solo el shader de vértices.

EJ02_01

Pintar dos triángulos, uno al lado del otro (sin formar un quad, de esta forma " //\ "), usando glDrawArrays, añadiendo más vértices a los datos (usando un solo VBO).

EJ02_06

Pintar el mismo hexágono, pero generando los vértices de manera procedural (usando algún tipo de algoritmo), mediante coordenadas polares.

EJ04_01

Pintar un quad con la mezcla de una textura con los atributos de color interpolados de cada vertice.

AG_05: Transformations, Camera

Sobre la base de la actividad AG5 implementar dos proyectos

  1. 3D y Cubos
  • Pintar en pantalla un conjunto de varios Cubos
  • Usando el Buffer de Profundidad y Cull Faces correctamente
  • Usando las matrices de transformación Model, View y Projection
  1. Cámara
  • Implementar una cámara FPS para la escena anterior
  • Crear una clase para contener los métodos de la cámara
  • Mover la cámara con el ratón y teclado

El proyecto en ejecución mostrará la escena solicitada. Tal como se explica en los temas 1.8 y 1.9 del manual teórico y se ha visto en el video AG5 durante la clase VC5.

AG_08: Blinn-Phong, Light Casters, Multiple Lights

Sobre la base de la actividad AG8 implementar cinco proyectos

  • BlinnPhong, modelo de iluminación Blinn
  • Luz direccional
  • Point Light
  • Spot Light, con bordes suavizados
  • Escena con multiples luces (direccionales y point lights)

El proyecto en ejecución mostrará las escena solicitadas. Tal como se explica en el tema de BlinnPhong y Emisores de Luz y se ha visto en el video AG8 durante la clase VC8.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

AG2: Rendering Triangles

Sobre la base de la actividad AG2 implementar el pintado de triángulos.

  • Usar VBO, EBO y VAO para subir vertices a la GPU
  • Crear los shaders de vértices y fragmentos básicos
  • Subirlos, compilarlos y linkarlos en un program, y verificar errores
  • Usar el VAO y el program para pintar un triángulo y un quad
  • Usar correctamente las caras frontales/traseras
  • Liberar y limpiar correctamente los Buffers y el program
  • El proyecto en ejecución mostrará un quad en pantalla de un color determinado. Tal como se explica en el tema 1.5 del manual teórico y se ha visto en el video AG2 durante la clase VC2.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

EJ02_03

Pintar los dos mismos triángulos usando un solo VAO, VBO y un EBO.

AG_07: Materials

Sobre la base de la actividad AG7 implementar dos proyectos:

  1. Materiales y Propiedades de la Luz:
  • Pintar en pantalla la escena de iluminación con los dos cubos (luz + cubo iluminado)
  • Usando el material con los tres componentes del Phong para el objeto
  • Usando los tres componentes de la luz por separado
  1. Mapas difusos y speculares
  • Pintar en pantalla la escena de iluminación con los dos cubos (luz + cubo iluminado)
  • Usando una textura difusa para el componente difuso del material del objeto
  • Usando una textura specular para el componente specular del material del objeto

El proyecto en ejecución mostrará la escena solicitada. Tal como se explica en los temas 1.11 y 1.12 del manual teórico y se ha visto en el video AG7 durante la clase VC7.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

EJ04_04

Pintar el quad y hacer que las coordenadas de textura hagan zoom sobre una parte de la textura, y usar los metodos de filtrado para ver diferencias.

EJ04_03

Pintar el quad con una textura repetida cuatro veces, tileada (no vale editar el png/jpg).

AG_13: Shadow Mapping

Sobre la base de la actividad AG13 implementar un proyecto.

  • Pintar una escena con un quad como suelo, y varios cubos, algunos apoyados en el suelo y otros flotando. Implementar sombras usando Shadow Mapping y solucionar todos los posibles problemas (acne, peter panning, oversampling y PCF).

El proyecto en ejecución mostrará las escenas solicitadas. Tal como se explica en el tema de ShadowMaps y se ha visto en el video AG13 durante la clase VC13.

El entregable consistirá en un archivo comprimido que dentro contendrá los fuentes desarrollados, con los fuentes de las librerias y el script de lua, todo en sus correspondientes carpetas.

Como norma, cuando se comparte código fuente (incluso en los repositorios de control de versiones), nunca se incluyen binarios de ningún tipo, objetos de compilación, ejecutables, ficheros de solución, etc... Así que en este caso, solo hay que incluir las carpetas include y src, y el fichero genie.lua de la raiz del proyecto.

EJ03_04

Pasar la posición del vértice al shader de fragmentos y pintar ese valor y entender el significado y como se interpola.

EJ02_04

Crear dos programs que pinten los triángulos del ejercicio anterior, que usen el mismo shader de vértices, pero usen un shader de fragmentos distinto para pintar cada triángulo, uno de cada color.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.