Detección de movimientos con una webcam (2a parte)

Autor

Jesús Bosch
Presidente UOC DotNetClub
http://geeks.ms/blogs/jbosch/

Última Actualización

26/11/2009

Descripción

En el artículo anterior describí unos sensores en determinadas zonas de la textura captada por nuestra webcam. Mediante estos sensores se pueden hacer distintas cosas, así a voz de pronto se me ocurre: pintar en pantalla con los dedos (sin tocarla obviamente xD), tocar un piano..., y otra que puede tener una utilidad más inmediata en videojuegos... mover o esquivar objetos. Lo que vamos a hacer pues será eso. Dado un modelo 3D importado, trataremos de moverlo por la pantalla.

Para ver como funcionan los sensores, habilitaremos dos viewports que dividirán la pantalla en dos zonas. La superior mostrará la textura tomada por la cámara y los sensores (estado y posición), y la parte inferior mostrará el modelo renderizado. La gracia del asunto está en que usaremos dos sensores, y la nave rotará hacia a la izquierda o derecha dependiendo de qué sensor activemos.

La posible complegidad algorítmica está resuelta en el artículo anterior... mover la nave resultará ahora trivial:

protected override void Update(GameTime gameTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
this.Exit();

sensorDerecha.Update(gameTime, this.capture.colorData, this.capture.CurrentFrame);
sensorIzquierda.Update(gameTime, this.capture.colorData, this.capture.CurrentFrame);

float direccion = 0;

if(sensorIzquierda.hayCambio)
direccion -= 0.01f;
if(sensorDerecha.hayCambio)
direccion += 0.01f;

mundo *= Matrix.CreateRotationZ(direccion);

base.Update(gameTime);
}

Se ve rápidamente que llamamos a la lógica de cada sensor, y a continuación utilizamos la información de estos sensores para rotar la nave hacia una dirección u otra, respecto el eje Z.

Otra pequeña particularidad que puede tener este código es que utiliza dos viewports en lugar de uno. Esto permite dividir la pantalla en N zonas de renderizado (en este caso dos). Esto se acostumbra a utilizar para los videojuegos multijugador, en que cada player tiene su trozo de pantalla.


Vídeo



Descarga

webcamMotion.rar - ( XNA GS 3.1)

Last edited Nov 26, 2009 at 6:53 PM by jbosch, version 3

Comments

No comments yet.