Category Sin categoría

Infografia, Práctica 1: Seam Carving

22/09/2010

Introducción

Esta práctica consiste en la implementación del algoritmo de Seam Carving para redimensionado de imagenes.

Shai Avidan, Ariel Shamir

Seam Carving for Content-Aware Image Resizing
ACM Transactions on Graphics, Volume 26, Number 3,
SIGGRAPH 2007

El algoritmo permite redimensionar imagenes sin que se aprecian algunos de los problemas habituales como cambios de proporcion o interpolaciones.

Material

Desarrollo

Teneis que usar el framework que os pasamos. Contiene una clase Color util para operar con colores, y una clase Image que os permite gestionar las imagenes (acceder a un pixel, cargar un TGA, guardar un TGA).

Teneis que usar GCC, si veis que no lo teneis instalado, escribid el siguiente comando desde vuestro terminal:

upf-software-install-grafic gcc
upf-software-install-grafic gcc-c++

Una vez instalada descomprimid el framework (unzip infografia2013.zip) y dentro encontrareis el codigo a utilizar

Ahora podemos compilar el código ejemplo:

g++ src/*.cpp -o app -std=c++0x

Se habrá creado un binario llamado prueba. Para ejecutarlo:

./app sunset.tga sunset2.tga

Las imágenes las podéis ver con el comando display si estais en linux y teneis instalado ImageMagick:

display sunset.tga

Si estais en windows podeis usar cualquier programa de imagenes.

Experimentos

Probar con diferentes tipos de imágenes y con varios juegos de parámetros, buscando evaluar la eficacia y los problemas del algoritmo.

Entrega

La clase de la semana del 6 al 10 de mayo antes de las 9 de la mañana.

No se aceptan entregas tardías, no se hacen excepciones.

Se entrega desde el Aula Global, si teneis algun problema enviadmela por mail pero tratad primero de entregarla por el Aula Global.

Qué se entrega:

  • Informe: introducción, el algoritmo, explicación del código, experimentos, conclusiones. En formatos html, ps, pdf o rtf.
  • Código C++, comentado, listo para compilar (con su Makefile). Formato: ASCII.
  • Las imágenes (cualquier formato) y parámetros (ascii) usados en los experimentos.
  • Se deben poder reproducir los experimentos con todos los materiales entregados, en cualquier PC de aulas, en Linux.
  • En caso de copia (entre equipos, o de otras fuentes) todos los integrantes de los equipos involucrados suspenderán inmediatamente la asignatura, y el Departament abrirá un expediente solicitando la expulsión temporal de dichos estudiantes.

Defensa

Duración: 10 minutos por equipo, con preguntas individuales. Todos los integrantes deben estar plenamente familiarizados con el trabajo de su equipo. Esta clase es de asistencia obligatoria. No hay que traer Slides, será una presentación oral delante del código.

Imagenes test

Imagenes

Usad las siguientes imagenes:

Consejos

  • Leer el artículo con atención.
  • Volver a leer el artículo con atención.
  • Invertir un buen tiempo en planear el código, no ponerse a programar directamente.
  • Hacer código modular: desglosar la tarea global en partes, hacer funciones para estas partes, llamar a las funciones desde un programa principal corto.
  • Estudiar el programa C++ de ejemplo, ver qué operaciones con imágenes hay definidas y cómo se acceden y modifican los valores de los pixels.
  • Mientras se escribe el código, y para hacer ‘debugging’, hacer pruebas con imágenes pequeñas y sencillas.
  • Probar primero con imágenes en escala de grises.
  • Implementar primero la reducción de fotos y si da tiempo probad con el ampliado de fotos.
No Comments

Infografía I: Práctica 3: Clipping

14/07/2010

Esta práctica trata sobre clipping, es decir, el recorte de figuras geometricas dentro de un area. Es una práctica más centrada en algoritmia y optimización, pensada para que los alumnos combinen matematicas con gráficos en un ejercicio sencillo.

La práctica consiste en recortar las lineas que introduzca el usuario para que encajen dentro del rectangulo de clipping, y descarte las que queden totalmente fuera. Esta tarea ya la realizan automaticamente los APIs gráficos como OpenGL sin embargo es bueno conocer los fundamentos básicos detras de las operaciones de optimización.

Read the rest of this article »

No Comments

Recursos sobre OpenGL

15/06/2010

En esta sección se recopilan enlaces utiles a temas relacionados con OpenGL.

Los siguientes enlaces son a tutoriales externos que pueden resultar utiles para el desarrollador de aplicaciones en OpenGL:

No Comments

TJE: Cómo hacer la entrega final

14/06/2010

Después de todas las horas invertidas en el desarrollo del juego es importante que el resultado final demuestre realmente todo ese trabajo y no se venga abajo por no haber cuidado la entrega final.

Es por eso que hay varios factores a tener en cuenta para la entrega:

  • Aseguraos de que no teneis ninguna ruta absoluta de los assets hardcoded en el código, sino que todas son relativas al root de la aplicación que es donde está el ejecutable.
  • Windows: Teneis que entregar una carpeta que contenga el ejecutable del juego (compilado en Release, está en la carpeta Release), con las DLLs que useis (SDL,Glew, Bass) y la carpeta con los Assets, para que baste hacer dobleclick para jugar.
  • OSX: Generar el ejecutable seguir la siguiente guia:
  • Product -> Archive = Compila la app, luego Share… para guardarla en una carpeta. Recordad que eso solo exporta el ejecutable. Cread una carpeta y meter dentro el ejecutable, las librerias (dylib) y la carpeta con los assets. Probad de ejecutar el ejecutable desde la consola (si haces doble click no funciona). Podeis crear un bundle si quereis, para más info sobre el bundle mirar este tutorial

  • Probadlo en varios ordenadores antes de entregarlo, si es en windows probadlo en PCs donde no esté instalado el Visual Studio, si os dá un error extraño al ejecutar es porque necesitais tener instalado el Visual C++ 2008 Runtime.

Sobre el juego en sí, basta haber jugado a cualquier juego del mercado para saber qué se espera de un juego al jugarlo:

  • Fase de carga: que nunca de sensación de haberse colgado. Para ello durante las fases de carga de los assets hay que asegurarse de que se vea algo en pantalla donde ponga “cargando…”.
  • Intro: que al jugador se le muestre una imagen o texto que explique el contexto del juego, para que sepa de qué trata y el proposito de sus acciones. Algo tan sencillo aporta personalidad.
  • Tutorial: que exista algun lugar donde el jugador pueda informarse de las teclas necesarias y acciones de las que dispone, ya sea un tutorial, una pantalla de ayuda o una imagen con el mapa del teclado.
  • Gameplay: que durante el juego el jugador pueda percibir facilmente cuales son sus objetivos y medir si los está completando (mostrando la puntuación, el numero de enemigos restantes, etc)
  • Victoria: que una vez completado el proposito de la fase del juego el jugador obtenga algun tipo de feedback visual que le informe de ello, un cartel que diga “Has ganado!” y si le puede mostrar ademas su puntuación, mejor.
  • Derrota: que si el jugador se queda sin vidas o sin energia le salga un texto que le diga “Game over” y su puntuación.
  • Retry: que una vez finalizada una fase (ya sea por victoria o por muerte) el jugador pueda volver a jugar o salir del juego.

Además es importante reforzar la entrega con algun tipo de documento que explique un poco las funcionalidades que tiene el juego, esto hará más facil la tarea de evaluación y evitará que el evaluador omita alguna de las funcionalidades.

No hace falta que sea un documento muy extenso, basta que sea algo facil de leer y donde se explique claramente el trabajo realizado.

No olvideis adjuntar un README.txt con los nombres de los participantes del grupo, correo electronico y NIA

Una vez tengais la “Release Candidate” de vuestro juego, comprimidlo y subidlo a algun servidor de la red (podeis usar dropbox, rapidshare, etc) y enviadnos el link.

Si por cualquier cosa generais algun video ingame y lo subís a internet añadir la url del video en el documento, o hacedmela llegar, así podré mostrarlo a los alumnos del curso siguiente.

No Comments

Un videojuego como TFG

27/05/2010

Es habitual que cada curso conforme acaba el año, los alumnos que han cursado la asignatura de Taller de Jocs Electronics se planteen realizar como Trabajo de Final de Grado (TFG) un videojuego.

Los que han tratado de programar un videojuego saben que no es una tarea sencilla, requiere de diferentes elementos interdisciplinares interconectados entre sí por una capa sólida de ingenieria del software, y como tal puede tener cierto interes como TFG, pero se queda corto como trabajo de investigación.

Un TFG no trata sobre desarrollar una aplicación, no hay que interpretarlo como “una práctica pero más larga”. La idea es que el alumno ponga en práctica su aprendizaje y vaya un paso más allá, investigue el estado del arte en un campo, analice los problemas que hay en él y proponga una solución ya sea original suya o combinando soluciones ya existentes de una manera diferente.

Es por eso que suelo advertir a cuantos me piden “desarrollar un juego como TFG” de que un juego como tal no es un TFG ya que no tiene parte de investigación, requiere de muchas horas pero si al final el resultado de dicho trabajo no resulta beneficioso para el resto de la comunidad entonces no tiene valor universitario.

Entiendo que para el alumno le puede parecer más interesante un videojuego ya que aprende algo en profundidad dentro de un campo que le atrae más, pero para eso ya existen multitud de libros, tutoriales de la red y masters especializados.

Solo tendría cabida un TFG sobre videojuegos como tal si la propuesta del usuario tratase sobre aplicar videojuegos a otros campos (como la docencia, o las noticias), o si propone una nueva manera de enfocar el desarrollo de videojuegos, desde una perspectiva técnica, o sobre cómo agilizar los procesos de desarrollo de juegos. Pero no suele ser nunca el caso. Los habitual es que el alumno pretenda que baste con hacer un videojuego utilizando tecnicas que existen desde hace decadas.

Sin embargo, el mundo de los videojuegos por su caracter interdisciplinar toca decenas de campos donde sí que se puede innovar, como gráficos, inteligencia artificial, física, red, generación de contenidos procedurales, animación, interacción hombre-maquina, computer vision, realidad aumentada, etc. Campos donde poder aplicar conceptos más relacionados con la ingenieria del software y la ciencia computacional.

Es por eso que si el alumno quiere profundizar en alguno de esos campos puede remitirse al departamento de la universidad temáticamente más cercano a su propuesta y trabajar en un proyecto que se sustente sobre un juego pero sin que el juego sea el TFG en sí (p.e. programar la IA de los enemigos usando redes neuronales, una capa de red que soporte cientos de usuarios…).

Sin embargo, si el alumno tiene un interes especial por el mundo de los gráficos 3D (campo en el que yo trabajo) aquí hay una lista ilustrativa de temas relacionados con gráficos que pueden servir como punto de partida para un TFG:

Y otros tantos que pueden salir de la combinacion de algunos de los anteriores.

Si se quiere sacar ideas lo mejor es leer alguno de los libros sobre graficos disponibles en la red, como los GPU Gems,ShaderX, o echarle un vistazo a los papers presentados en los Siggraphs de cada año (2011, 2010, 2009, 2008).

Dicho esto, estoy siempre abierto a sugerencias, siempre y cuando la propuesta incluya conceptos novedosos no solo para el alumno sino tambien para la comunidad en general.

No Comments

Infografia I: Práctica 9: Iluminación

25/05/2010

En esta práctica aprenderemos a sombrear objetos para dar más realismo y profundidad a la escena usando los algoritmos de Goureud y Phong. Además servirá para aprender cómo sacar toda la potencia de las nuevas tarjetas gráficas mediante el uso de Shaders.

Read the rest of this article »

No Comments

Infografia I: Práctica 5: Cámaras

3/05/2010

En esta práctica aprenderemos sobre el uso de camaras en entornos 3D, cómo construir las transformaciones, como proyectar de 3D a 2D, los diferentes tipos de proyección que existen y cómo combinarlos para crear la matriz MVP.

Read the rest of this article »

No Comments

Infografia I: Práctica 4: Transformaciones

3/05/2010

En esta práctica se trata todo el tema relacionado con las transformaciones geometricas, cómo posicionar objetos en nuestro entorno y cómo moverlos, rotarlos y escalarlos. Tambien se profundiza en el concepto de sistema de coordenadas.

Para ello se tendrá que hacer uso de las transformaciones mediante matrices. Es importante tener fresca toda la teoría de algebra asociada a matrices (multiplicacion de matrices, propiedades de las matrices, etc).

Esta práctica es clave para moverse con facilidad por entornos 3D.

Read the rest of this article »

No Comments

Infografia I: Practica 2. Bresenham

3/05/2010

La practica consiste en programar algoritmos de rasterizado de lineas y circulos. Sirve como toma de contacto con los conceptos de optimización y pintado en framebuffer.

Read the rest of this article »

No Comments

Programación en C++

30/04/2010

Para desarrollar aplicaciones gráficas es muy importante sacarle el máximo partido al hardware. Para ello se hace indispensable el uso de un lenguaje potente y el empleo de herramientas que hagan un uso óptimo de los recursos.

Por eso el lenguaje más extendido en el desarrollo de aplicaciones gráficas es C++. Sin embargo C++ tiene fama de ser complejo y tener una curva de aprendizaje demasiado pronunciada.

A continuación hay una serie de presentaciones que pueden servir para ayudaros a sacar el máximo partido a dicho lenguaje:


No Comments