Category Sin categoría

Seminario Radiosity

9/05/2014

Responde estas preguntas y enviamelas por mail a javi.agenjo@gmail.com

  • Para que necesitamos usar Global Illumination? Dame la url de una imagen de internet (que no sea de la web) donde se pueda apreciar la diferencia entre sin y con.
  • Como funciona el algoritmo de Radiosity? (describeme el proceso)
  • Qué parametros del algoritmo puedes modificar para conseguir mejores resultados? (Factores que puedas “tunear”
  • Diferencias entre Radiosity y Photon Mapping?
No Comments

Solucionar problema compilación aulas

7/04/2014
Hay un error en la instalación de Windows de las aulas que afecta a la asignatura.
Si al compilar el código desde Visual Studio por segunda vez os da un error de que el archivo no se puede escribir haced lo siguiente:
Inicio -> Boton derecho sobre Equipo -> Administrar -> Servicios y Aplicaciones -> Servicios:

Buscad uno llamado Experiencia con aplicaciones

Dadle a Tipo de Inicio -> Manual

Aplicar

Boton Iniciar

Y ya podeis aceptar, el error al compilar no deberia suceder.

 

No Comments

Recursos Javascript

9/04/2013

Es importante recordar que para programar en Javascript en la web lo primero es conocer como funciona la web, eso incluye saber un poco de HTML y CSS. Estas slides introducen a algunos de los conceptos. Tambien suele ser util saber algo del protocolo HTTP.

Aquí hay un listasdo de enlaces utiles a presentaciones y cursos relacionados con el desarrollo de aplicaciones web en Javascript.

Conceptos elementales sobre Javascript

Este es un listado de conceptos que todo programador de Javascript deberia conocer y dominar para evitar errores frecuentes.

Programar directamente en la web

Existen algunas webs donde puedes programar Javascript directamente en la web lo cual puede resultar util para testear conceptos.

Cursos online

Estos son algunos cursos online muy completos donde aprendes a programar en javascript desde cero, paso a paso, con ejemplos interactivos.

Librerias utiles para aprender

Para aprender Javascript nada mejor que usar algun ejemplo práctico, estas librerias te permiten obtener resultados visuales muy facilmente, haciendo el aprendizaje más llevadero.

Aprender jugando

Charlas

Otros enlaces utiles

Algunos enlaces extra

No Comments

Tec-Seminar: introduction to programming with Javascript

17/07/2012

This seminar is addressed to people with low knowledge in programming, who want to know the basics.

Teacher

Javi Agenjo from GTI-Graphics

Content

Topics that we will handle:

  • Containers (Arrays, Objects)
  • Loops (for, while)
  • Functions
  • Callbacks

Material

You have to bring a laptop with a good text editor installed, this are some recommendations:

  • Editplus for Windows
  • Sublime Text 2 for Windows or OSX
  • Text-Wrangler for OSX.

We will use the browser as the execution environment.

 

No Comments

Infografia: Practica 2, Pipeline gráfica

8/05/2012

Introducción

Escribir en C++ para Linux un programa que recibe como entrada un fichero ASCII con una superficie poligonal y permite su visualización 3D (grabando el resultado en una imagen a disco).

“3D Computer Graphics, 3rd edition”, por Alan Watt. Capítulos 5 y 6.

Funciones a implementar

  • Lectura de un fichero ASCII con los datos 3D de la superficie poligonal (el formato de este fichero se especifica más abajo).
  • Creación de una estructura de datos para almacenar estos polígonos y operar con ellos.
  • Transformación de coordenadas del objeto a punto de vista (págs. 143-7).
  • Culling o eliminación de caras no vistas (págs. 147-8).
  • Transformación de coordenadas a espacio de pantalla 3D (págs. 155-6).
  • Shading (págs. 171-182) (debéis especificar al menos una fuente de luz).
  • Rasterization (págs. 183-7).
  • Z-buffer (sección 6.6.4, págs. 192-3)

Opcionalmente se le pueden añadir funcionalidades al programa: clipping de polígonos que están parcialmente fuera del frustrum (págs. 168-171), interacción (cambio del punto de vista, rotaciones, traslaciones, escalas), cambio de propiedades de los materiales para shading, colores diferentes para objetos diferentes, etc.

Formato del fichero ASCII

Línea 1: <V (número de vértices)> <P (número de polígonos)>
Línea 2: <coordenada x1> <coordenada y1> <coordenada z1>
Línea 3: <coordenada x2> <coordenada y2> <coordenada z2>

Línea V+1: <coordenada xN> <coordenada yN> <coordenada zN>
Línea V+2: <número de lados del polígono 1> <1er vértice> <2o vértice> … <último vértice> (ordenados tal que la normal sea saliente)
Línea V+3: <número de lados del polígono 2> <1er vértice> <2o vértice> … <último vértice>

Línea V+P+1: <número de lados del polígono P> <1er vértice> <2o vértice> … <último vértice>

 


 

Por ejemplo, esta sería la representación de una pirámide de base cuadrada:

5 5
0 0 0
0 1 0
1 1 0
1 0 0
0.5 0.5 1
4 1 2 3 4
3 1 4 5
3 4 3 5
3 3 2 5
3 2 1 5

Código ejemplo

Podéis usar el mismo código de la práctica 1 para trabajar con imágenes.

Entrega

Fecha límite: POR DETERMINAR, 9AM, a través del Aula Global. No se aceptan entregas tardías, no se hacen excepciones.

Defensa

POR DETERMINAR.
Duración: 10-15 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.

Se entrega desde 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 si es necesario). 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.

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.
No Comments

Infografia: Practica 1, Sintesis texturas

17/04/2012

Introducción

Esta práctica consiste en la implementación de un algoritmo de sistesis de texturas.

A.A. Efros and T.K. Leung Texture Synthesis by Non-parametric Sampling

El algoritmo permite rellenar regiones de la imagen de las que no tenemos información.

Material

Desarrollo

Teneis que utilizar la libreria ImageMagick++ para esta practica, esta libreria os permitirá cargar imagenes, leer su contenido y guardarlas en disco. Para ello teneis que instalarla desde el repositorio de aplicaciones, en la categoria Grafics.

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 (untar morphing.tar) y dentro encontrareis el codigo a utilizar, se creará un directorio morphing con subdirectorios morphing/inc, morphing/src, morphing/obj y morphing/bin

Ahora podemos compilar el código ejemplo:

cd morphing/src

make -k prueba

cd ..

Se habrá creado un binario llamado prueba. Para ejecutarlo (situados en morphing/):

./obj/prueba AT_poster.png basura lista.txt 0.5 100

Las imágenes las podéis ver con el comando display:

display basura100.tif

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

Mirar en moodle.

Se entrega desde 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.

Juego de pruebas para defensa..

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.
No Comments

Infografía I, Práctica 8: Texturas

25/02/2011

Esta práctica trata sobre el uso de imagenes para rellenar poligonos, tambien conocidas como texturas.
Gracias a las texturas podemos dar mucho más realismo a los entornos.

Tambien se habla sobre la opcion de pintar poligonos mezclando el color de cada pixel con el de los pixeles que ya hay pintados en lugar de reemplazarlos.

Material

Requisitos

  • Implementar la clase Texture:
    Class Texture:
    bool loadTexture( const char* filename ); //carga la textura lista para usar
    void enable(); //la activa
    
  • El codigo de la funcion onDraw que pinta varios cuadrados por pantalla con la texturas.
  • Que haya más de una textura en pantalla.
  • Que alguna textura tenga tiling (que se repita N veces) sobre el poligono.
  • Sugerencias opcionales:
    • Utilizar blending para combinar varias imagenes en el mismo sitio.

Fallos comunes

  • Cargar las texturas en el bucle de render, es decir, cada vez para cada frame. Es lento y un aperdida de recursos notable. Hay que cargarlas una sola vez al arrancar la aplicación.
Valor: 10 puntos
No Comments

Infografia I, Práctica 6: Curvas

18/02/2011

Esta práctica trata sobre maneras de definir curvas mediante ecuaciones matematicas de diferente grado y de interactuar con ellas para dibujarlas o definir rutas.

Conocer el uso de las curvas es clave cuando queremos mover objetos o la camara por el escenario de una manera suave.

Material

Requisitos

  • Implementar las siguientes funciones del framework:
    Class Spline:
    void addPoint( Vector3 point);
    Vector3 getInterpolatedPoint(float t);
    
  • El codigo de la funcion onDraw que pinta la curva utilizando un GL_LINE_STRIP, o podeis crear un metodo render en la clase spline que recibe por parametro el numero de iteraciones (segmentos) a pintar de la curva.
  • Pintar los puntos de control de color distinto que los puntos que definen el principio y el final de la curva
  • Los puntos se tienen que introducir con el raton y se tienen que poder modificar con el boton derecho del raton si estamos trabajando en 2D (en 3D no hace falta).
  • Sugerencias opcionales:
    • Pintar un punto animado que se desplace por encima de la curva recorriendola y que cuando llegue al final salte de nuevo al principio.

    Para la segunda parte de la practica, implementar:

  • Modificar la clase spline para que pueda contener más de una curva garantizando siempre la continuidad C1.
  • Crear una función que te diga cuantos segmentos curvos tiene la curva continua.
  • Hacer una función que cierre la curva manteniendo la continuidad tanto por el principio como por el final.
  • Crear una spline 3D en el escenario, los puntos pueden estar en el codigo directamente, o podeis usar vuestra imaginación (pero nada de pedir que se introduzcan por consola…)
  • Permitir recorrer la curva completa usando un intervalo normalizado de T (0 es el principio de la primera curva y 1 es el final de la última curva):
    	Vector3 getNormalizedInterpolatedPoint(float t);
    
  • Sugerencias opcionales:
    • Que mantenga la continuidad incluso cuando se modifica en 2D la posicion de los puntos de control de la curva.
    • Animar la camara para que navegue por encima de la curva (basta asignar el eye a una T de la curva y el center a una T ligeramente superior).

Fallos comunes

  • Teneis que almacenar unicamente los puntos de control, los puntos intermedios sobre la curva se calculan conforme se van necesitando en funcion de la T, pero no se almacenan.
  • No saber sacar de una T normalizada (que va de 0 a 1) en una curva continua formada por varias curvas el indice que indica qué curva local es y su T local.
  • La aplicación nunca debe colgarse incluso si usamos una T fuera de rango (cuidado porque muchas veces con T == 1 las aplicaciones se cuelgan).
Valor: 10 puntos
No Comments

Práctica 2: Decimation of Triangle Meshes

13/10/2010

Introducción

Esta práctica consiste en la implementación del algoritmo de diezmado de triángulos para reducir el número de polígonos de una malla triangulada manteniendo la apariencia de la superficie.

William J. Schroeder, Jonathan A. Zarge, and William E. Lorensen

Decimation of Triangle Meshes

Computer Graphics (SIGGRAPH ’92 Proceedings), Vol. 26, no. 2, July 1992, pp. 65–70.

También puede ser muy útil consultar el manual de VTK disponible en la biblioteca u online.

Objetivo

Escribir un programa en C++ para Linux que implemente el algoritmo de Decimation of Triangle Meshes citado previamente. El algoritmo recibe como entrada una superficie triangulada y la simplifica, reduciendo el número de triángulos pero manteniendo la apariencia de la superficie.

Material

Desarrollo

Para leer los datos tridimensionales y visualizar la superficie poligonal generada se tendrá que utilizar la biblioteca VTK. Para instalarla en las aulas, ir al menú: “Aplicacions -> Gràfics -> VTK”.

Una vez instalada:

1.  Descargar el framework de la Práctica 2 (decimation.tar)

2.  Descomprimirlo: ejecutar desde la línea de comando la instrucción

tar xvf decimation.tar

3.  Ahora podemos compilar el código ejemplo:

cd decimation/src

Hay dos cpp de ejemplo:

Politext.cpp crea una superficie muy sencilla. Se compila con:

make -k poli

cara.cpp carga de disco la superficie con la que trabajaremos, una cara, y muestra ejemplos de cómo recorrer sus triángulos y puntos, evaluando conectividades y pertenencias. Se compila con:

make -k cara

Para la práctica 2, trabajaremos sobre el archivo “cara.cpp”.

4.  Se habrá creado un binario el la carpeta “obj” llamado poli.o/cara.o respectivamente. Para ejecutarlo desde la carpeta “decimation”:

./obj/cara

Experimentos

Probar con diferentes parámetros, tanto externos (elegidos por el usuario), como internos del algoritmo.

Entrega

Fecha límite: Martes 9 de Noviembre a las 08:00AM; No se aceptan entregas tardías, no se hacen excepciones.

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 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

Martes 9 de Noviembre

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

Consejos

  • Leer el artículo con atención.
  • Leer el código de ejemplo con atención, hasta entender todos los pasos y ejemplos.
  • Mirar el archivo fran_cut2.vtk, en textura/vtkdata. Reconocer su estructura: primero hay una lista de coordenadas 3D de puntos (3 puntos por línea), después una lista de polígonos, donde cada línea tiene el formato: <núm. de lados del polígono> <Id del punto A> <Id del punto B> <Id del punto C> donde siempre el polígono será el triángulo formado por los puntos ABC, en ese orden (normal saliente).
  • 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.
  • Consultar la documentación de la librería VTK.
No Comments

Infografia I, Práctica 5: Cámaras

23/09/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.

Material

Requisitos

  • Implementar las siguientes funciones del framework:
    Class Camera
    	void updateViewMatrix( void );
    	void updateProjectionMatrix( void );
    
  • La escena tiene que tener varios objetos en diferentes posiciones comportandose de manera independiente.
  • La posición de la camara (eye) se tiene que poder controlar con el teclado (sin afectar al center).
  • La posicion donde apunta la camara (center) se tiene que poder controlar con el teclado (sin afectar al eye).
  • Sugerencias opcionales:
    • Se valorará la interacción con la cámara, la comodidad para moverse por el entorno, poder cambiar de cámara, etc.
    • Interaccion más compleja: Poder mover la cámara relativa a donde está apuntando para navegar por la escena.
    • Pintar la escena desde dos puntos de vista distintos a la vez, usando glViewport (esta instrucción nos permite definir la región de la pantalla donde vamos a dibujar).

Fallos comunes

  • Tener la viewmatrix mal y no darse cuenta. Fijaos si el resultado de mover el eye o el center concuerda con lo que intuitivamente debería pasar. Si se mueve solo el eye entonces lo que haya en el centro debe seguir en el centro, si se mueve el center entonces la posición de la camara tiene que ser exactamente la misma. Podeis comparar vuestros resultados con los que genera el codigo de OpenGL, si hay mucha diferencia entonces hay algun fallo. Mirad de no estar usando la transpuesta en algun paso.
  • Al mover la camara se percibe como si rotase sobre el eje Z (roll), no deberia pasar si el up es (0,1,0). No confundir el vector Top por el Up.
  • Llenar el codigo de variables model. Si teneis más de una model podeis hacer un array de models en lugar de usar variables sueltas.
  • Utilizar las funciones de OpenGL que crean las matrices automaticamente (glLookAt o glPerspective)
  • Multiplicar los vectores en lugar de hacer producto vectorial. Teneis un método en la clase Vector3 para realizar el producto vectorial.
Valor: 10 puntos
No Comments