jmvazq / mvid04_advanced_game_programming Goto Github PK
View Code? Open in Web Editor NEWMVID04 - Advanced Video Game Programming I - Course Deliverables
MVID04 - Advanced Video Game Programming I - Course Deliverables
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.
Sobre la base de la actividad AG9 implementar un proyecto:
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.
Sobre la base de la actividad AG3 implementar:
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.
Sobre la base de la actividad AG3 implementar:
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.
Sobre la base de la actividad AG11 implementar dos proyectos.
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.
Sobre la base de la actividad AG10 implementar tres proyectos.
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.
Pintar los dos mismos triángulos usando dos VAOs y VBOs diferentes para sus datos.
Pintar un hexágono centrado en la pantalla, usando un VAO, VBO y EBO, generando los vértices de la manera habitual a mano.
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).
Pintar el quad con dos texturas interpoladas, y controlar el valor de la interpolación entre ambas con el teclado.
Sobre la base de la actividad AG6 implementar:
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.
Mover el triángulo a lo largo de la pantalla con el paso del tiempo, usando un uniform para ello.
Implementar el proyecto base del curso, a partir del cual se van a desarrollar todos los contenidos.
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, ...).
Sobre la base de la actividad AG12 implementar dos proyectos.
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.
Dibujar el triángulo boca abajo, usando los vértices de los ejemplos anteriores, tocando solo el shader de vértices.
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).
Pintar el mismo hexágono, pero generando los vértices de manera procedural (usando algún tipo de algoritmo), mediante coordenadas polares.
Pintar un quad con la mezcla de una textura con los atributos de color interpolados de cada vertice.
Sobre la base de la actividad AG5 implementar dos proyectos
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.
Sobre la base de la actividad AG8 implementar cinco proyectos
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.
Sobre la base de la actividad AG2 implementar el pintado de triángulos.
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.
Pintar los dos mismos triángulos usando un solo VAO, VBO y un EBO.
Sobre la base de la actividad AG7 implementar dos proyectos:
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.
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.
Pintar el quad con una textura repetida cuatro veces, tileada (no vale editar el png/jpg).
Sobre la base de la actividad AG13 implementar un proyecto.
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.
Pasar la posición del vértice al shader de fragmentos y pintar ese valor y entender el significado y como se interpola.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.