SOBRE MÍ
Soy Daniel García, me gradué en Ingeniería Multimedia por la Universidad de Valencia.
Comencé la carrera porque tenía curiosidad por aprender a programar y porque siempre he sido muy aficionado a los videojuegos, también me fije que podríamos ver asignaturas muy interesantes como animación o simulación.
Durante el trascurso de la carrera pudimos profundizar en conocimientos y herramientas pertenecientes a diferentes sectores dentro de la informática. Se me abrio un mundo lleno de curiosidades y conocimento muy interesante.
Los sectores que más me han llamado la atención han sido los relacionados con la computación gráfica, videojuegos, animación, la realidad virtual y aumentada y diseño y desarrollo web.
He adquirido conocimientos en el desarrollo de aplicaciones de escritorio, web o móviles, además de otras competencias como bases de datos, seguridad informática, redes, producción y edición audiovisual, gestión de proyectos, entre otros.
En esta página encontrarás algunos de los proyectos que he realizado durante la carrera.
DATOS PERSONALES
PROYECTOS
Video de Resultados finales
Implementamos una aplicación capaz de generar distintos tipos de terrenos y planetas generados de forma procedimental.
Un terreno esta definido por un conjunto de vertices a los que se les asocia una altura.
La altura de un vertice viene definida por un promedio de alturas de algunos vertices concretos(depende del algoritmo utilizado) y
un factor de altura que que es el resultado de una ecuación estocástica.
Se realizó un estudio de esta ecuación con el fin de poder modificarla y así variar
los resultados sobre los terrenos.
Los algoritmos utilizados son:
- Punto medio
- Diamante cuadrado
La ecuación para la altura esta basada en el exponente de Hurst:
- z = random() * A * 2 ^ ((-1) * n * H)
Hicimos algunas modificaciones sobre esta funcion y realizamos un estudio de los parámetros
Las modificaciones que hicimos nos permitieron generar diferentes tipos de terrenos:
- Terrenos abruptos
- Terrenos con montañas muy definidas
- Terrenos llanos
- Volcanes
- Combinaciones de los anteriores
- Generación de planetas
Ademas tambien integramos dos algoritmos de suavizado erosion termica e hidrica.
Tambien hicimos un texturizado en funcion de la altura de los pixeles y de la pendiente.
Desarrollamos un minijuego con Unity, HTC VIVE, Kinect y control de Voz.
El jugador se encuentra en un escenario 3D de realidad virtual, esta sobre una plataforma
y rodeado de torretas las cuales le disparan fruta.
El objetivo del jugador es evitar
que la fruta impacte sobre la plataforma utilizando unas catanas las cuales cortaran
la fruta al impactar y que toman las posiciones de los mados de las HTC VIVE. Por un lado, si
el jugador consigue cortar 10 frutas, podrá utilizar un "superpoder" que consiste en que
al ponerse en una pose de T con los brazos el tiempo se parará y la fruta lanzada por las torretas
caerá, esto se consigue gracias a captura mediante Kinect. Por otro lado, el usuario podrá
cambiar entre pistolas y catanas en cada mano de forma independiente al decir el comando de voz
"Pistola" o "Espada" al mando correspondiente. Cuando use una "Pistola" el usuario podrá disparar
a las torretas, si efectua 5 impactos sobre una torreta la destruira y si consigue destruir las
4 torretas ganará la partida. Si las torretas consiguen impactar la base 10 veces el jugador perderá.
Desarrollamos un minijuego con Unity y la herramienta Vuforia de Realidad Aumentada para Android.
El minijuego consiste en que el usuario mediante el uso de un marcador cilindrico de Vuforia,
la cámara de su dispositivo móvil verá la torre del conocido juego de mesa Jenga.
En la pantalla el usuario tendrá una mirilla con la que debe apuntar a los bloques de colores
indicados en la interfaz, pulsar sobre la pantalla para lanzar un proyectil en la direccion hacia
donde ha apuntado y una vez alcanzado el bloque del color indicado estirar hacia atrás para arrastrar
el bloque con nosotros y sacarlo de la torre. Si la torre se desploma o si el jugador dispara a un bloque
incorrecto se dispara el final de la partida.
Desarrollamos varias aplicaciones de introducción a la programación de gráficos 3D con la API OpenGL en C/C++
Utilizaremos las bibliotecas Glew y Freeglut.
- La primera aplicación nos sirvio para recordar y aplicar el uso de primitivas geométricas, proyecciones y transformaciones afines.
Implementamos una aplicacion donde mediante el uso de primitivas geométricas
generamos 4 cubos mediante el uso de tiras de triangulos o cuadrados segun nos interese,
Mediante el uso de transformaciones afines (rotaciones y traslaciones) simulamos una especie de
sistema solar con los cubos.
- La segunda aplicación nos sirvio para recordar y aplicar la iluminación y texturas a objetos en OpenGL.
Se implementaró un material con los componentes de luz difusa, especular y brillo, 3 tipos de luces, una direccional
un foco de luz y otra puntual. También vimos dos tipos de sombreado, plano e interpolación lineal.
Por otro lado pusimos una textura de metal sobre dos de los objetos, preparamos el programa para que se tuviera en cuenta la luz
sobre la textura o no, tambien para que la textura se repita o se estire y por ultimo
3 formas de pegado, Nearest, Linear y Linear Mipmap.
- La tercera aplicación consiste en dibujar una gran cantidad de cubos formando un cubo mas grande mediante el uso de primitivas geométricas,
se utilizaron 3 metodologias, la primera es de forma inmediata lo cual es poco eficiente, la segunda es mediante un buffer, un Vertex Buffer Object (VBO),
el cual reserva un espacio de memoria en la VRAM de la GPU lo cual agiliza mucho el proceso y por ultimo utilizando un Vertex Array Object(VAO), el cual nos
permite manipular los diferentes VBO de forma sencilla.
Desarrollamos un videojuego 3D de plataformas desde 0 con 4 niveles. Los niveles están compuestos por enemigos, saltos,
plataformas móviles, zonas secretas, palancas para activar elementos, accesos complejos, zonas que causan daño, jefes finales
objetos recolectables, etc.
El videojuego trata de un astronauta al que se le a averiado la nave y tiene que
ir recorriendo diferentes planetas para recolectar las piezas necesarias para volver
a la tierra.
Desarrollamos un videojuego 3D de plataformas desde 0 con 4 niveles. Los niveles están compuestos por enemigos, saltos,
plataformas móviles, zonas secretas, palancas para activar elementos, accesos complejos, zonas que causan daño, jefes finales
objetos recolectables, etc. Tenemos repartidos a lo largo de los niveles diferentes puntos de control por si el usuario muere, que no tenga que
volver a jugar el nivel desde el principio. El astronauta dispone de un arma, con la que puede
disparar a los enemigos, puede apuntar automaticamente tras pulsar un botón. Tiene munición limitada,
que puede ir incrementándose tras coger cajas de munición. La vitalidad
del astronauta se ve representada mediante una barra de vida, que se decrementa tras recibir daño. Puede recuperar
la vitalidad mediante el objeto correspondiente. El astronauta tiene las funciones básicas de un videojuego
de plataformas, correr, saltar y agacharse. Se puede pausar y volver al menu principal, al último punto de control o seleccionar otro nivel.
En el menu principal se puede cargar partida, empezar una nueva partida, ver los créditos o salir.
El videojuego trata de un astronauta al que se le a averiado la nave y tiene que
ir recorriendo diferentes planetas para recolectar las piezas necesarias para volver
a la tierra.
El videojuego paso por varias fases de desarrollo:
- Análisis
- Diseño
- Implementación
- Pruebas
Trabajo realizado en equipo:
- Diseño y desarrollo de los 4 niveles.
- Diseño y desarrollo de todos los enemigos y modelos 3D, así como ajustar las animaciones y los modelos, IA,
gestión de la vida de los enemigos y daños.
- Diseño y desarrollo del personaje principal (animaciones, funcionalidad básica y controles (moverse, saltar,
correr, activar las animaciones, sonido, máquina de estados de animaciones(animator)), interfaz de barra de vida,
munición y coleccionables y su gestión)
- Diseño y desarrollo del arma del personaje principal.
- Gestión de la aparicion y destruccion de objetos y enemigos..
- Diseño e implementación de los puntos de control, autoguardado y detección de final de nivel.
- Diseño y desarrollo de los 4 niveles.
- UI (menus, información jugador y pausa).
- Gestión del sonido y efectos sonoros.
- Control de la cámara y puntos de vista.
- Pruebas, coherencia y solución de problemas.
Implementamos una aplicación capaz de generar terrenos mediante el uso de mapas de alturas.
Utilizamos 2 algoritmos geométricos basados en fractales para distribuir las alturas entre los
diferentes puntos que componen la malla, a los cuales cada vez se les da una altura mediante una
ecuación estocástica.
- Punto Medio
- Diamante Cuadrado
También utilizamos 2 algoritmos para poder generar un aspecto más realista del terreno, simulando
erosiones.
- Erosión Térmica: Es un proceso de suavizado que se basa en que un punto de mayor altitudi disminuye su masa y con ello su altura
depositando en los puntos de su alrededor de menor altitud parte de su masa. Se consiguen pendientes más horizontales y elimina los picos afilados
- Erosión Hídrica: Simula los fenomenos físicos que produce la lluvia sobre un terreno al bajar el agua por el mismo. Se consiguen mantener los picos de las zonas altas y se aplanan las zonas bajas además de otros efectos.
Esta aplicación es compatible con otra aplicación desarrollada anteriormente donde podemos juntar olas con terreno.
Implementamos una aproximación a un modelo PBD, y hacemos algunas pruebas. PBD se basa en un sistema de partículas, estas partículas se ven influenciadas por
diversas fuerzas externas, como gravedad, viento, o restricciones para obtener su movimiento.
Cada partícula está formada a rasgos generales por:
- Posición x
- Velocidad v = derivada de x
- Aceleración a = derivada de la v
- Masa m
Vamos a utilizar el método de integración de Euler semi-implícito para hallar la velocidad
y la posición de las partículas. El objetivo es que se cumplan las ecuaciones de movimiento
y respetando las restricciones
Para simular objetos formados por un sistema de partículas introduciremos una serie de
restricciones describiendo el objeto. Las restricciones son una o una serie de ecuaciones que
actúan sobre la posición de una o varias partículas del sistema. Las restricciones principales son
de distancia y bending:
- La restricción de distancia obliga a las partículas a mantener una distancia d entre la
partícula a evaluar y otra partícula. La propuesta de Muller necesita dos vértices
C(Xi,Xj) = ||Xi - Xj|| - d = 0
-La restricción de Bending o pliegue obliga a las partículas a mantener un cierto ángulo,
hay dos versiones, una propuesta por Muller y otra por Kelager, nos basaremos en la de
Kelager ya que es más sencilla de implementar. Utiliza en lugar de ángulos la distancia
del baricentro formado por 3 vértices.
C(Bi,Bj,V) = ||V - c|| - h0 = 0
c = 1/3 * (Bi + Bj + V)
Una vez ya tenemos claras las restricciones, se pueden crear diferentes objetos
jugando con las diferentes estrcuturas que podemos hacer con dichas restricciones
Nosotros implementamos los siguientes objetos capaces de interactuar entre sí:
- Bandera/Tela: Estructura 2D formada por las restricciones, es capaz de interactuar
con un plano(suelo), con esferas fijas o móviles, otros objetos deformables, viento
y la gravedad. Podemos aumentar o disminuir su flexibilidad y el comportamiento a nuestro antojo.
- Esferas: Pueden ser fijas o móviles, interactuan entre sí, con un plano(suelo), con telas o con otros objetos
deformables.
- Cubo: Estructura 3D formada por restricciones, es capaz de interactuar con todo lo mencionado anteriormente.
En función de la estructura se puede conseguir un cubo elástico que absorbe el golpe y rebota o un
objeto deformable que se deforma al golpearse.
Implementamos una aproximación a un modelo SPH, y hacemos algunas pruebas. Para poder desarrollar
completamente este proyecto se necesitaria un pc mucho mas potente que el que se ha utilizado.
Vamos a enfocar SPH desde un punto de vista Lagrangiano, se basa en la utilización de “partículas” y en
promediar los diferentes parámetros mediante la discretización de las ecuaciones de Navier-Stokes con el uso de diferentes kernels.ç
El calculo de los parámetros se hace mediante la utilización de gradientes y laplacianos.
Cada partícula contendrá cierta cantidad de fluido, es decir, cada una representa un volumen de fluido.
Los parámetros básicos son los siguientes, velocidad, posición, masa, densidad,
presión, viscosidad y, además, hemos añadido al fluido la tensión superficial.
Implementamos varias aplicaciones basadas en el algoritmo A*.
Generamos una cuadricula donde cada celda se encuentra en el estado vacio o con obstaculo,
seleccionamos dos celdas al azar, una es el inicio y la otra es el final, el algoritmo A*
es capaz de encontrar el camino más corto en el menor tiempo posible, el algoritmo es capaz de evaluar
las diagonales.
Depués integramos esta aplicación con el Path following, es decir hacemos que un grupo de boids
recorran el camino mas corto desde el punto A hasta el punto B, también hicimos que n grupos de boids
pudieran recorrer uno o varios caminos.
Implementamos varias aplicaciones basadas en el comportamiento y movimiento de grupos e individuos.
Partimos de una aplicación donde podemos generar grupos de boids que se mueven en el espacio. La velocidad
de los boids depende de la aceleracion que a su vez depende de la aceleración, la aceleración se ve influenciada
por las fuerzas internas y externas, en nuestro caso por 3 fuerzas que influyen en el grupo:
- Alineación
- Cohesión
- Separación
Para implementar la segunda aplicación nos inspiramos en estas fuerzas y añadimos una cuarta fuerza mas llamada objetivo.
Implementamos 2 funciones distintas:
- Dirigirse hacia un punto reduciendo o no la velocidad al entrar en un area.
- Huir de un objeto aumentando o no la velocidad al entrar en un area.
En la tercera aplicación hicimos que los boids se persiguieran unos a otros e implementamos métodos de predicción de movimiento
tanto del perseguidor como del perseguido.
La última aplicación tenia como objetivo hacer que los boids fueran capaces de seguir un camino marcado pero que no todos fueran
exactamente por el mismo sitio, es decir que tuvieran cierta libertad. Hemos definido un camino con puntos y tambien hemos delimitado
un ancho. Para poder cumplir el objetivo tuvimos que implementar 3 comportamientos:
- Wander: El Wander consite en hacer que los boids se muevan libremente por el espacio sin que
sigan una trayectoria rectilínea todo el rato. Es decir, conseguir un movimiento curvilíneo y
arbitrario, de tal forma que sea más natural.
- Path following: Consiste en que los boids vayan de un punto a otro recorriendo un circuito o camino.
- Paredes: Para evitar que los boids salgan fuera de la carretera, cuando se vayan a separar de la línea central
más distancia que el ancho de la carretera, es decir cuando se vayan a salir se les induce una
tercera fuerza de seek hacia el centro de la carretera.
Implementamos una aplicación capaz de simular un oleaje.
Para ello utilizaremos un conjunto de puntos distribuidos homogeneamente en un plano.
las coordenadas "x" y "z" se mantendran constantes mientras que la coordenada "y" variara
en funcion de los valores de una ecuación de onda, podemos diferenciar entre 4 tipos:
- Ondas simples: Pueden ser radiales o direccionales su ecuacion es la siguiente:
* Y = A * sin(w*t-k*x+fi);
* Radiales x = sqrt(poscentro-posperturbar^2)
* Direccionales x = PVector.dot(dirección Normalizada, posicion Perturbar)
- Ondas de Gestner
* X = posIni.x+Sum(q * A * Dir.x * cos(wt-kx))
* Y = Sum(A * sin(wt-kx))
* Z = posIni.z+Sum(q * A * Dir.z * cos( wt-kx))
- Combinación de ondas
Implementamos una aplicación capaz de simular colisiones a nivel de particula con particula y particula con plano.
Dejaremos caer x numero de partículas mediante la fuerza del peso sobre 3 planos y haremos que colisiones con los planos y entre partículas.
Podemos cambiar la fuerza de rozamiento, el tamaño de las partículas y desactivar la gravedad.
Para el tratamiento de la colisiones hemos implementado 2 metodologias, cambio de sentido de las velocidades y poner un muelle entre las partículas,
ambas, se basan en la 3 acciones siguientes:
- Detección
- Reposicionamiento
- Cambio de velocidad
Por otro lado para gestionar todas estas colisiones hemos implementado 3 estructuras de datos:
- Fuerza bruta se comprueba todo el rato las colisiones por cada particula.
- Grid se divide el espacio de forma homogénea en celdas, se comprueba para cada particula las colisiones con las partículas de su
celda y de las celdas vecinas.
- Hash cada posición del espacio cae en una celda distinta de la tabla hash.El concepto es un poco más complejo que el Grid sin embargo, también es sencillo hallar las partículas y celdas vecinas.
Implementamos una aplicación capaz de simular fuegos artificiales con sistemas de partículas.
Hemos simulado la fuerza del viento y de la gravedad, m * k y m * g , respectivamente.
El cañon se mueve en el eje horizontal, puede cambiar la angulación del disparo y la potencia.
Por un lado, el cañon dispara una particula representando una carcasa de cohete, al llegar a su punto más alto
explota liberando n número de partículas, que pueden ser de diferentes colores y pueden formar diferentes formas y
tamaños. Las partículas tienen un tiempo de vida determinado cuando se les acaba son destruidas.
Implementamos una aplicación que simula el movimiento de una bandera a la que le afecta la gravedad y el viento.
La aplicación es interactiva y en tiempo real, se han hecho varias pruebas con diferentes estructuras generadas mediante la unión
de muelles y parámetros como la densidad de la malla, la fuerza del viento y su dirección.
Además también detecta colisiones contra una esfera.
Las estructuras implementadas son las siguiente y se pueden combinar entre si:
- Structure: Los muelles forman una cuadrícula ortogonal 1 a 1. Proporciona la estructura básica.
- Shear: Forman una estructura de rombos. Aporta transmisión lateral.
- Bend: Se unen dos a dos. Conseguimos un efecto antiarrugas y mejor transmisión
El cálculo de las fuerzas viene dado por el sumatorio de las fuerzas externas (gravedad+viento) e internas (ley de Hooke).
Implementamos una aplicación que simula el movimiento de una cuerda a la que le afecta la gravedad. Esta cuerda se hizo mediante la unión de varios muelles implementados en la práctica de muelles.
Implementamos una aplicación que simula humo mediante la utilización de un sistema de partículas a las cuales
se les asigna una imagen de una nuve, un color y transparencia.
cada partícula es lanzada con una potencia aleatoria y una dirección
aleatoria dentro de un rango de valores aceptable, ademas tienen un tiempo de vida aleatorio.
La vida de cada párticula va disminuyendo y a su vez lo hace su opacidad
hasta que son eliminadas.
Implementamos una aplicación que simula el comportamiento físico de un objeto que flota y la salpicadura producida podemos hacer que el objeto tenga mayor o menor flotabilidad.
Implementamos dos aplicaciones que simulan el comportamiento físico de un acelerómetro, mas concretamente
la primera simula un cohete donde el usuario puede pulsar un boton para que el cohete vaya incrementando su energia
y por tanto supere la fuerza de la gravedad. La segunda basandonos en este principio hemos implementado un minijuego
en el que se puede acelerar una nave en cualquier direccion ortogonal y se trata de intentar llegar a un punto concreto
sin caerse, cada nivel aumenta la gravedad y por tanto es cada vez más difícil.
Cuando aceleramos se aplica la siguiente fórmula:
- Ec += P * dt
Cuando dejamos de acelerar:
- vel = sqrt((2*Ec)/masa)
- Ec += - kr * vel * vel * dt
Implementamos una aplicación en la que podemos observar la oscilación de 3 tipos de muelles, uno doble y uno simple
en los que integraremos su movimiento teniendo en cuenta su posición, velocidad y aceleracón, así como las fuerzas
que intervengan basandonos en la ley de Hooke, uno simple representado mediante una función de seno para poder compararlos.
La ley de Hooke esta definida por la siguiente ecuación:
- Fp = m * g
- Fk = ks(Lactual - Lreposo) – kd * vmuelle
El muelle simple al cual le aplicamos una función sinusoidal esta definido por:
- Y = A sin(w*t +fi)
Se realizan una serie de pruebas cambiando diferentes parametros y comparando 4 integradores distintos y la ecuación senoseidal:
- Euler Explicito
- Euler Semi-Explicito
- Heun
- Runge-Kutta (RGK2)
Implementamos una aplicación en la que podemos disparar un cañon que efectua un disparo al que le afecta la gravedad
formando un tiro parabólico.
La unica fuerza que actua sobre el tiro parabolico es la gravedad por tanto la aceleración es constante.
La formula del tiro parabolico es:
- x = vel.x * t
- Y = -0.5 * ace.y * t * t - vel.y * t
Se realizan una serie de pruebas cambiando diferentes parametro y comparando 4 integradores distintos y la ecuación del tiro parabólico:
- Euler Explicito
- Euler Semi-Explicito
- Heun
- Runge-Kutta (RGK2)
Implementamos dos aplicaciones capaz de simular diferentes velocidades.
La primera aplicación es la simulación de la velocidad de una montaña rusa, en primer lugar
hacemos que el objeto se desplace por las vias a velocidad constante, despues en función de la
pendiente aplicamos mayor velocidad o menor.
En la segunda aplicación se tienen en cuenta las fuerzas que actuan en un plano inclinado y el rozamiento, también
se realizanuna serie de pruebas con 4 integradores distintos:
- Euler Explicito
- Euler Semi-Explicito
- Heun
- Runge-Kutta (RGK2)
Implementamos una aplicación capaz de simular la conservación del momento angular,
que es una magnitud física que esta relacionado con la masa, la velocidad y la distancia
con respecto al centro de un objeto que gira en un circulo.
Es capaz de simular la conservación del momento angular entre dos
cuerpos que están conectados con una varilla rígida de distancia variable.
El momento angular de dos cuerpos que giran solidariamente alrededor de un centro
de masas se conserva si no actúan fuerzas externas.
Si la configuración del cuerpo cambia
la velocidad angular del sistema cambia para mantener el producto constante.
- I(t1) w(t1) = I(t2) w(t2).
Esto es lo que ocurre con los patinadores cuando están rotando sobre sí mismos y abren y cierran sus brazos.
Implementamos 3 aplicaciones para representar en 2D diferentes modelos matemáticos:
- Movimiento circular uniforme.
- Osciladores.
- Espiral.
Para ponerle mas énfasis a la importancia de los principios de animación realizamos este video comparativo de algunas escenas dentro de nuestros cortos donde se pueden observar con y sin principios de animación.
Utilizando el panel completo desarrollado por nosotros mismos, la sala de captura de movimiento(MOCAP) y Blender hicimos 3 cortos que representaran algunos de los principios de animación clásica, intentamos imitar lo mejor posible las escenas reales representadas ajustando tiempos, velocidades, sonidos, efectos de camara, efectos de luz, modelos, etc
En este video se puede observar el funcionamiento del panel completo.
Las funcionalidades del panel generado son:
- Interpolador de posiciones mediante 3 tipos: Lineal(Posición), Hermite(Velocidad) y Catmull-Rom(Tensor).
- Interpolador de rotaciones de cuaterniones: Slerp.
- Poder alinear cualquier objeto con la tangente del movimiento que deseemos.
- Controlar la velocidad de la acción: Reparametrización por la Longitud del arco y el cambio de variable en las curvas de movimiento.
Modificamos el panel para añadirle una nueva funcionalidad.
Teniendo un recorrido dado, una curva de movimiento, queremos poder cambiar
los tiempos en los que se alcanza diferentes posiciones del movimiento.
Podemos introducir keyframes en una nueva propiedad llamada cambio de variable,
como su propio nombre indica utilizaremos un cambio de variable para poder controlar
los diferentes tiempos que duran las acciones modificando simplemente la posición de los
keyframes dentro del panel del F-Curves de blender. También podemos hacer que
la velocidad de toda la acción sea constante y que se pueda aplicar la alineación con la tangente
y la interpolación de cuaterniones, anteriormente implementadas.
Creamos un nuevo panel con las siguientes funcionalidades:
- Interpolación rotaciones mediante el uso de cuaterniones, a esta función la llamamos slerp.
- La capacidad de poder alinear cualquier objeto con la tangente del movimiento que deseemos.
Sin tener en cuenta la orientación del objeto sobre la tangente
y teniendo en cuenta el vector perpendicular a la tangente orientando al objeto,
consiguiendo el movimiento típico de una montaña rusa.
- En el panel podemos orientar al objeto mediante una forma cómoda, tal y como queramos,
introduciendo los vectores por defecto o podemos ponerlos personalizados,
es decir el vector que queramos.
Creamos un esqueleto desde 0 para animar unas piernas. Utilizamos 2 métodos para dotar de movimiento estas piernas, cinemática directa y cinemática inversa. Ademas, tras captar una serie de movimientos en una sala de captura de movimiento, ajustamos diversos esqueletos a los cuerpos, el primero es un cuerpo normal y el segundo con los brazos mas largos.
Implementamos un programa en el que se puede manipular una superficie mediante puntos de control
utilizando 3 metodologias geometricas distintas:
- Bezier
- A. Casteljau
- Uniform Rational B-Splines (NURBS)
Implementamos la posibilidad de ver diferentes niveles de detalle en función de la distancia del objeto representado hasta la cámara.
En el video lo hemos hecho invertido a como se hace normalmente para hacer notorio este efecto, normalmente a mayor distancia menor
nivel de detalle ya que a una distancia determinada no se van a apreciar los detalles, con ello conseguimos reducir el coste computacional.
Representación de un tiovivo mediante formas geometricas simples. El tiovivo gira sobre sí mismo y las figuras del tiovivo(los caballitos) suben y bajan según la funcion seno.
Mediante el uso de diferentes modelos, hemos generado una escena 3D elaborada completamente en OSG. Decidimos utilizar la matricula de los vehiculos de la escena como reloj digital y el logo de la marca de los vehiculos como reloj analogico. Preparamos varias formas de visualización y luces diferentes en la misma escena.