Raydium : 2 sources vidéo simultanées, API « live »

Ceux qui suivent l’ont peut être remarqué lors du dernier article de ce blog : Raydium cherche des affinités avec la vidéo. Le but principal de cette démarche est de pouvoir, lors des présentations publiques de Raydium, offrir une interaction directe et plus fun auprès des "spectateurs".

En général, on souffre beaucoup de l’image relativement négative du jeu vidéo auprès de certaines tranches d’age, sans compter l’aspect passablement fermé du stand Raydium : une bande de gens, vraissemblablement très concentrés sur leur truc, autour d’un tas de machines. Sexy.

C’est là que la vidéo peut nous aider beaucoup, en complément de méchanismes de reconnaissance d’image, de réalité augmentée, … pour proposer des interfaces intuitives, abordables et amusantes.

Avant d’arriver à ce niveau, il faut déjà que Raydium dispose d’une interface dédiée à la vidéo, intégrée de manière la plus transparente possible au reste du moteur. Et c’est cette première étape qui est sur le point de se concrétiser.

L’idée à été de séparer le problème de la vidéo-in-game en 2 domaines distincts :
– Ouverture d’un périphérique vidéo, configuration du périphérique, système de capture
– Modification d’une texture déjà chargée dans le matériel, à la volée

Le système porte le nom de live textures, et la partie capture va -évidemment- utiliser l’API live.

Histoire d’être bien précis (terre à terre ?), voilà la liste des fonctions intéressantes ajoutées à l’API de Raydium pour le sujet qui nous intéresse.

// "live"

// création d’une texture live depuis un device (voir la section vidéo en dessous)
int raydium_live_texture_video(int device_id, char *as);

// création d’une texture live depuis une image (à la responsabilité de l’utilisateur)
int raydium_live_texture_create(char *as, unsigned char *data_source, int tx, int ty, int bpp);

// callback à appeler à chaque changement de la source de données
void raydium_live_texture_refresh(int livetex);

// Partie chargée de la gestion des périphériques vidéo

// ouverture d’un périphérique, avec détails (ex: "/dev/video0",352,288)
int raydium_live_video_open(char *device, int sizex, int sizey);

// ouverture d’un périphérique, détection et configuration automatique
int raydium_live_video_open_auto(void);

L’utilisateur de cette API (simple, dans l’esprit Raydium donc) peut disposer d’un callback pour être informé de chaque arrivée d’une nouvelle capture depuis le périphérique vidéo, et ainsi mettre en place son système de reconnaissance d’image ou autre (cf images de l’article précédent).

Nous avons eu la possiblité de tester cette API hier soir, et dans une situation relativement poussée : 2 webcams (des Philips 680K, Vesta Pro) connectée à la machine de test, chacune associée à une texture.


FlexH, filmé par les deux webcams, après un subtil calibrage


Les deux Vesta, se filmant l’une l’autre


L’une filme l’écran, l’autre filme la première


Tentative d’image stéréoscopique, qui marche a peu près (attention, elle fait quand même un peu mal aux yeux 🙂

Toujours est-il que le test est concluant, et qu’il devient possible d’avancer maintenant vers les étapes suivantes de ce sous-projet, principalement vers deux pistes :
– Reconnaissance d’un marqueur (un pointeur laser, pour l’instant) pour agir sur l’image.
– Réalité augmentée, pour insérer des objets 3D (avec la gestion de la physique) sur un terrain réel filmé.

Ah, si vous avez des idées originales quand à l’utilisation de ce système, n’hésitez pas !


Publié

dans

par

Étiquettes :

Commentaires

Laisser un commentaire