Autor de la practica:
Fco. Javier vega Aguirre.
Documentación:
Descripción de la aplicación:
Se trata de una aplicación de Realidad Virtual que simula una ventana a un mundo virtual. En principio una ventana fija y estática, no se mueve, simplemente muestra una visión de un punto en una caja virtual, que emula una profundidad, que no existe, pero que el usuario, ve como si fuera una caja con volumen real. Por lo tanto al moverse, los objetos que hay en la caja cambian su perspectiva.
Lo que vemos en dicha caja, es un bodegón de tres objetos, una pirámide en estructura de alambre, un cubo flotante de aspecto similar a arena o madera y una esfera con aspecto de planeta tierra.
Descripción de Funcionamiento:
Se trata de una aplicación compuesta por dos Sketches que se comunican en rol de Servidor/Cliente.
Por lo que primero es necesario poner en funcionamiento la parte del Servidor, que en nuestro caso es el sketch “RunThisServerFirts.pde”.
una vez lo hemos arrancado, ya podemos arrancar la parte del cliente que se denomina: “RV.pde”.
El servidor:
La parte del servidor, se encarga de escanear la imagen de vídeo en busca de caras utilizando para ello la librería “OpenCV for Processing”.
Una vez encuentra la cara, la enmarca dentro de un cuadrado, que es que utilizamos, para obtener las coordenadas “X” e “Y”. La coordenada “Z”, la obtenemos de la anchura de dicho cuadrado.
Acto seguido las enviamos al cliente, y volvemos a empezar el ciclo.
El cliente:
El cliente, recibe las coordenadas, y las mapea para ajustarlas a la resolución de pantalla que tenemos en este sketch.
Una vez transformadas, las aplica a la posición de la cámara o sujeto virtual, cambiando de esta manera la forma en la que se muestra la escena retocando la perspectiva para que de más sensación de realismo.
Diagrama Autómata:
Bucle:
- Busca cara.(Servidor)
- Captura Posición.(Servidor)
- Envía Coordenadas.(Servidor)
- Recibe Coordenadas.(Cliente)
- Mapea Coordenadas.(Cliente)
- Calcula Escena.(Cliente)
- Muestra Resultado.(Cliente)
Dificultades:
Historia del desarrollo:
Pruebas, pruebas y más pruebas.
Al principio, mi intención era hacerlo todo en una sola aplicación. Las primeras pruebas consistían en buscar la parte del código que “trackeara» la cara. Realice muchas pruebas y la mas estable resulto ser WhichFace de Daniel Shiffman, la versión modificada por Jordi Tost. Era la más estable. y la que menos “temblores” causaba.
Una vez tenía el tracker. Lo siguiente era representar la escena, algo que en principio parecía fácil, resulto ser lo mas complicado. La posición de la cámara y la perspectiva también dieron su propia guerra.
Y que decir tiene que encontrar la manera de hacer que dos Sketches separados se comunicaran, (era la primera vez que lo intentaba) también dio su trabajo, porque me saltaba todo el rato un error, el cual logré solucionar con un try/cach.
Finalmente conseguí una versión estable y que respondía al reto planteado.
El principal Handicap de estar dividido en dos partes, es que primero hay que arrancar la parte del servidor y seguidamente la parte del cliente.
De esta forma podemos ajustar la resolución de la pantalla de salida (cliente), a la resolución que tengamos en nuestro ordenador, pudiendo dejar oculta la parte del servidor.
Resultado final:
Ver en YouTube
Descargar código fuente de GitHub aquí.
Descargar código fuente de GDrive aquí.
árbol de contenidos
Mejoras:
Versiones futuras:
Navegando entre montañas.
He barajado la posibilidad de hacer una especie de simulador de vuelo muy sencillo, potenciarlo con arduino y Wiichuck, que es un adaptador para conectar el mando 6 ejes nunchuck de la consola nintendo WII.
Seria un escenario de montañas en 3D en estructura de alambre sobre el cual interactuariamos haciendo rotar o avanzar con el mando, basado en el trabajo de Daniel Shiffman :
Coding Challenge #11: 3D Terrain Generation with Perlin Noise in Processing.
Además de movernos por el escenario con el mando, también podríamos cambiar el ángulo de visión de la escena moviendo nuestra cabeza, lo que daría mas sensación de realismo.
Impacto:
Inspiración para otros:
La web como referente.
Al igual que yo me he inspirado en el trabajo de otros como son:
Johny Chung Lee y Fabian Schlieper . Para realizar algo parecido a lo que ellos habían hecho pero en otro lenguaje de programación. Espero y deseo, que otras personas en el futuro usen mi trabajo y lo mejoren, o bien como entorno de videojuegos o como cualquier utilidad que puedan imaginar.
Siempre he creído en internet como una fuente de inspiración y referencia. Por lo tanto el contenido debe ser de libre disposición para el estudio y el avance de la humanidad, aunque las leyes manipuladas por los poderosos digan lo contrario.
Hacks:
El arte de dar el uso inesperado:
Yo no pensé que se pudiera hacer eso…
Esta frase es la que el autor de cualquier cosa piensa cuando ve un Hack de su obra. Ya que un Hack es un uso inesperado e insólito de la misma. Es algo que el autor no había ni soñado para su creación, por esa razón me es imposible imaginar un hack para mi creación. Puedo intentar imaginar usos alternativos, como videojuegos, atracciones (casa del terror, etc…), usos medicos, etc…
Pero no llego a imaginar más allá. Ojalá un día me sorprenda algo fantástico que yo he llegado a inspirar.
Referentes:
Johny Chung Lee. “ johnnylee.net “.27 de Diciembre de 2016.
Johnny Lee. “.Head Tracking for Desktop VR Displays using the WiiRemote ”.27 de Diciembre de 2016.
Fabian Schlieper. “. 3D Head Tracking Webcam OpenCV ”.27 de Diciembre de 2016
1Button. “.i3D — Head Tracking for iPad: Glasses-Free 3D Display ”.27 de Diciembre de 2016.
algomix. “. iDesktopVR – head tracking for iPhone / iPod Touch”.27 de Diciembre de 2016.
Daniel Shiffman. Coding Challenge #11: 3D Terrain Generation with Perlin Noise in Processing. https://www.youtube.com/watch?v=IKB1hWWedMk. 27 de Diciembre de 2016.