samedi 9 mai 2009

La 3d stéréoscopique , la Wiimote , le headtracking et Sarkozy ...

Quel rapport ente ces quatre éléments ?

Pour le quatrième je cherche encore mais il y en a sûrement un .
Pour les trois autres il s'agit d'une nouvelle application de la wiimote et des leds infrarouges sur Test Drive unlimited .

Tout d'abord , le headtracking consiste à capturer d'une manière ou d'une autre , la position de votre tête pour La retransmettre dans vos jeux .
La plus amusante de ces applications , réalisée par johnny lee :


La 3d stéréoscopique , c'est l'impression de profondeur dans ces même jeux (ou films ) .
Chaque oeil reçoit une image différente légèrement décalées qui permettent d'évaluer la profondeur .
Pour transmettre deux images différentes , trois technologies :

-La polarisation de la lumière : écran Zalmann (nécessitant donc un écran spécifique : pas très pratique ...)

-Les shutters : nécessitant un écran cadencé a plus de 100 Hz , pour transmettre alternativement ,chaque image au bon œil avec une synchronisation sur des lunettes dites shutters qui masquent alternativement un œil puis l'autre :
inconvénients :Écran 100 Hz uniquement cathodique pour l'instant.
Problèmes de compatibilité sur les jeux .

-Les lunettes rouge et Bleu dites anaglyphes : La plus vieille et la plus compatible technologie qui soit avec les pilotes nvidia (sous vista ), ou avec les pilotes iz3d .
Nvidia :
http://www.nvidia.fr/object/geforce_3D_vision_CD_1.07_fr.html
Iz3d :
http://www.iz3d.com/t-dcdriver.aspx

Quel rapport avec le Headtracking , me direz vous , alors passons à la démonstration sous Test Drive unlimited avec nos lunettes 3d rouge et bleu , et deux petites leds infrarouges , alimentées par usb de chaque côté , qui font toute la différence :




Remarque : je serais incapable de vous dire si ce script est envisageable sur d'autres jeux de voitures, à vous de le savoir si je vous dis comment ça marche :
Dans test drive , on dirige la vue en maintenant le clic gauche appuyé et en bougeant la souris , il convient donc , comme je le dis dans la vidéo, de masquer une des deux leds lorsque vous naviguez dans les menus avec votre vraie souris , donc, a priori , tout jeu où la vue fonctionne sur le même principe doit pouvoir utiliser ce script , avec peut-être des ajustements à faire au niveau de la sensibilité .


Pour les aspects techniques , regardez le premier article et la grosse vidéo de 40 minutes qui vous permettront de savoir comment construire ces lunettes .
Les lunettes anaglyphes , vous pouvez les trouver un peu partout ,
ici par exemple :
http://www.panosphere-store.com/PBSCCatalog.asp?PBMInit=1&gclid=CPSM_6qQsJoCFQJhnAodelVecw
J'ai beaucoup moins détaillé le script que pour Doom 3 , mais c'est parce que c'est un script de pacotille , si vous avez déjà compris celui de Doom 3 .
Voici donc , le dit script :(et pour les retardataires je vous conseille d'aller voir le post précédent , qui vous permettra de télécharger glovepie si nécessaire ...)

Les mouvements , le Doomlike , le bonheur ...

La wiimote possède une caméra infrarouge qui lui permet de distinguer sur la sensor bar 4 leds infrarouges et de renvoyer leurs coordonnées à votre wii ou a votre PC.
La wii n’utilise pas à fond les capacités de cette wiimote car les mouvements vus par la wiimote des leds infrarouges sont dépendants , puisqu’elles sont fixes les unes par rapports aux autres sur votre sensor bar , l’idée est d’exploiter presque au maximum cette merveille qu’est la wiimote en se mettant sur le corps des leds infrarouges , qui pourront alors se déplacer indépendamment et donc on pourra au final réaliser un gameplay à base de mouvement .

Tout d’abord le résultat final : une vidéo de la jouabilité réalisée sous doom 3 :
Remarque : Ce script est utilisable sous tous les doomlikes , mais il est préférable de l'utiliser dans ceux ou l'on peut régler la fluidité de la souris comme dans doom 3 , sinon la vue se déplace par a coups .

Motiondoom3
Vidéo envoyée par Physicfrenchie








Le matériel nécessaire :

-la wiimote
prix de la wiimote : une trentaine d'euros chez micromania .
-windows xp ou vista
-un dongle bluetooth qui permet à votre PC d’utiliser le bluetooth (une vingtaine d’euros ), c’est en fait une petite clé usb : attention , tous les dongles ne sont pas compatibles je vous renvois donc à la liste de compatibilité suivante :
http://wiibrew.org/wiki/List_of_Working_Bluetooth_Devices/

Attention , pour faire fonctionner le bluetooth vous avez besoin de deux choses , le pilote , que vous pouvez trouver sur le site du constructeur ou que windows va vous installer automatiquement si vous avez de la chance et l’application gérant ce bluetooth , et moi je vous recommande bluesoleil :
www.bluesoleil.com/download/


- les leds IR
https://fr.farnell.com/jsp/search/productdetail.jsp?SKU=3152868/

2,5 euros les 5 c'est donné.

-le câble électrique :
https://fr.farnell.com/jsp/search/productdetail.jsp?SKU=1172853/
9.4 euros
-Le Fer à souder : https://fr.farnell.com/jsp/search/productdetail.jsp?SKU=4683924/
13.8 euros
-L'Étain : https://fr.farnell.com/jsp/search/productdetail.jsp?SKU=1689796/
6.5 euros

Pour les résistances vous pouvez prendre ceci (sachant que vous avez le choix ): http://fr.farnell.com/multicomp/mf50-30r/resistance-0-5w-1-30r/dp/9340394/

5.4 centimes d'euro l'unité (vous ne saviez pas que vous pouviez acheter quelque chose avec 5.4 centimes d'euros et bien voilà)

Enfin une paire de gants qui traine chez vous , et un peu de scotch pour vous protéger des pates des diodes et soudures lorsque vous manipulez les gants pour éviter le coup de jus .
Pour faire moins craignos , vous pouvez aussi coller des bouts de tissus .

Coût total en imaginant acheter une vingtaine de leds et de résistances et que vous ne disposez pas de fer à souder :
Total : 93.50 euros
Prix d'une wii : 246 euros (avec wiisports) !!!!

Petite précisions techniques : le sens de la led est important, la borne ou il y a le méplat doit pointer vers la borne – (le 0V) de votre alimentation.
- vous pouvez également réaliser une sensor bar pour votre PC (une led suffit) pour utiliser la wiimote comme une souris. (il ya un script glovepie pour faire cela (onedotmouse inclus avec glovepie))
- si c’est une utilisation d’ »essai » pour cette souris, vous pouvez utiliser des bougies à
la place de votre sensor bar (qui émet également de l’infrarouge)
- pour vérifier que la led émet , utilisez l’appareil photo numérique , ou celui de votre téléphone pour « voir » la lumière infrarouge , qui je vous le rappelle est invisble à l’œil nu .

Pour les aspects purement techniques ils sont contenus dans cette vidéo qui aborde point par point, l’alimentation des leds infrarouges (usb , transfo , piles ) , la connexion de la wiimote au PC , le choix des leds , le choix des résistances , le tableau blanc interactif ,et une introduction à glovepie :




Une fois que vous avez vu cette vidéo vous devriez être capable de réaliser vous-même les gants .
Pour ce qui est de la position des leds : il y en a une sur mon index droit , une sur mon poing gauche et une dernière sur mon pouce qui est en réalité sur une baguette chinoise collée à mon pouce , pour l’éloigner de celle de mon index et permettre à la wiimote de mieux les distinguer .

L’étape suivante concerne la programmation pure et dure .

Glovepie, les scripts , explications :

Tout d’abord vous avez besoin de glovepie version 0.29 :
http://carl.kenner.googlepages.com/glovepie_download
qui permet de programmer l’interaction entre votre wii et votre PC au travers d’un script .
Glovepie doit donc rester actif (et en mode run ) lorsque vous lancer votre jeu


Le langage de glovepie est très simple, et intuitif d'abord les structures de base :
d'abord sachez que vous pouvez mettre un commentaire avec // (mets tout ce qui a après et sur la ma ligne en commentaire)
ou encore /* commentaire */ (met tout ce qu'il ya entre ces deux balises (ici "commentaire") en commentaire et ce même sur plusieurs lignes.
tous le reste de ce texte peut être directement copié dans un script glovepie et executable en faisant run (ou f9)
Glovepie exécute en boucle le programme que vous avez écrit, ainsi si votre programme est trop long ou mal organisé , le temps de faire cette boucle sera trop
long pour que votre gameplay soit satisfaisant, donc le critère de la longueur est important.
Mais sachez qu'avant que cela n'atteigne votre gameplay il faut que votre programme soit vraiment très long, ainsi , réaliser un programme de 600 lignes bien organisées ne pose
aucun problème de rapidité.
Il n'existe pas de compilation des programmes, elle est automatique , une fois votre programme écrit faites juste run .

key.c=var.a //si vous appuyez sur la touche c de votre clavier (à n'importe quel moment ) la variable var.a sera mise à 1 ( sachez que vous n'avez pas besoin comme dans d'autres langages , le C par exemple de déclarer l'existence de vos variables avant leur utilisation , glovepie le fait automatiquement .

key.x=var.b //si vous appuyez sur la touche x de votre clavier (à n'importe quel moment) la variable var.b sera mise à 1



if var.a=1 and var.b=2 then // dans glovepie les variables que vous voulez utiliser s'écrivent var.quelquechose , a ne désignerait pas une variable mais la touche a de votre clavier alors attention


midi.a5=true // active le son midi a5
wait 60 ms // attends 60 millisecondes
midi.a5=false //désactive le son midi a5

end if // fins des différentes actions concernant la condition "var.a=1 et var.b=0 " c'est à dire étant donné la façon dont le programme est écrit dès que j'ai appuyé sur c et x.
//vous pouvez écrire directement comme condition pour réaliser la même chose : if key.c=1 and key.x=1 then

//sachez également que key.c et key.x comme toutes les touches de votre clavier sont des variables logiques vous pouvez donc "oublier le "=1" de serait sous entendu de cette façon :
// if key.c and key.x

// Utilisation de la wiimote comme manette classique :
key.s=wiimote.A // attribue à l'appui sur la touche a de votre wiimote un appui virtuel sur la touche s de votre clavier.

// pour la désignation des autres boutons : voir http://www.wiili.org/index.php/GlovePIE#Buttons

// la structure est toujours la même wiimote.nomdubouton qui renvoie 1 ou 0 selon que vous appuyez effectivement ou non sur ce bouton en réalité .

// vous voyez donc qu'il est très simple d'utiliser sa wiimote comme simple manette (en considérant qu'on a passé la difficulté connexion par bluetooth )

// vous pouvez maintenant paramétrer votre wiimote comme bon vous semble (sans utiliser d'IR ou de Nunchuk )

//rq : pour que vos jeux comprennent que vous avez effectivement appuyer sur une touche il faut que l'appui soit suffisamment long
//exemple
Key.a=1
key.a=0
//ces deux lignes vont être exécutées à la suite par glovepie très rapidement et ceci peut faire que cela n'ait aucun effet dans votre jeu d'où l'intérêt de l'instruction wait
key.a=1
wait 60 ms
key.a=0
// 60 ms suffisent pour votre jeu et n'obstrue pas le gameplay

// pour utiliser le Nunchuk vous devez faire exactement la même chose en écrivant par exemple : Wiimote.Nunchuk.CButton

// précédemment j'ai détaillé l'utilisation de la manettes en tant que boutons logiques c'est à dire qu'ils sont on ou off .
// détaillons maintenant l'utilisation analogique , c'est à dire le stick analogique du Nunchuk , l'accéléromètre de votre wiimote ou encore l' infrarouge qui peuvent prendre plus de 2 valeurs .

// L’utilisation analogique revient à considérer des coordonnées d'axes
wiimote.nunchuk.joyX // désigne la coordonnée en X du stick analogique de votre nunchuk c'est a dire le déplacement latéral
//lorsque le joystick est a fond a gauche JoyX vaut -1 , a fond a droite :1 , au milieu :0
//
wiimote.nunchuk.joyY// est l'axe vertical du joystick : il vaut -1 en haut 1 en bas et 0 au milieu

//pour l'accéléromètre vous pouvez l'utiliser en faisant : wiimote.RawAccX qui est l'accélération suivant x de votre wiimote en mètre/(seconde)² (même structure pour y et pour z )
// je rappelle que g , la pesanteur vaut 9.81 mètres/(secondes)²

//le Nunchuk possède également son accéléromètre accessible par presque les même commandes wiimote.nunchuk.rawAccx et de même pour y et z .

//enfin l'infrarouge :

// vous pouvez savoir si un point infrarouge est visible avec wiimote.dot1vis qui renvoie 1 dans ce cas

// vous pouvez savoir si deux point sont visibles si wiimote.dot1vis et wiimote.dot2vis valent 1 en même temps
// la wiimote peut distinguer quatre points infrarouges et donner leurs coordonnées : la résolution de la camera de la wiimote est de 1024*768 points et les indications que je vais donner sont considérées du point de vue de la camera de votre wiimote

wiimote.dot1x (désigne la coordonnée du point 1 sur l'axe horizontal et vaut 0 tout a gauche et 1023 tout a droite )
wiimote.dot1y (désigne la coordonnée du point 1 sur l'axe vertical et vaut 0 tout en haut et 767 tout en bas )

// rappelez vous que l'angle de vision de votre wiimote est d'environ 30 degrés , ceci est à prendre en compte pour savoir de quelle étendue spatiale vous disposez si vous êtes par exemple a deux mètres de votre wiimote avec vos leds

Avec les indications que je vous ai donné vous devriez être en mesure de comprendre déjà quelques programmes préfaits qui sont directement intégrés avec glovepie .

Mon script jouable avec trois leds : (utilisé dans la première vidéo que vous avez vu) :Le script est annoté de façon à comprendre comment il fonctionne
et de façon a pouvoir le modifier selon la position que vous allez prendre face à votre wiimote et la distance à laquelle vous allez jouer , le programme est fait par défaut pour fonctionner à une distance de 1m 50 environ . et votre wiimote doit être disposée de façon à vous voir en entier.
:

http://www.megaupload.com/?d=IGFDC2JP

Si vous avez des questions , n’hésitez pas à me joindre par mail :

Physicfrenchie@gmail.com