Una delle novità più importanti degli ultimi 10 anni nel campo delle console è stato, senza dubbio, il Wiimote: il rivoluzionario controller Wii che consente al giocatore di interaggire con il gioco usando i movimenti del proprio corpo.
Gli accelerometri presenti nel controller hanno permesso lo sviluppo di giochi molto "pratici", basti pensare a come WiiSport permetta di giocare a baseball o a tennis, impugnando il telecomando come se fosse una mazza o una racchetta e facendo compiere al personaggio del gioco gli stessi movimenti fatti dal giocatore "reale"; cosa impensabile un tempo.
Cosa vogliamo fare
Un semplice programma che permetta di visualizzare i movimenti del Wiimote; ho pensato di utilizzare il Wiimote per ruotare un cubo colorato.
Come lo vogliamo fare
Lo farò con Processing, che forse conoscerete già e che consentirà di creare il programma senza dover spendere troppe righe di codice. L'ho conosciuto grazie ad Arduino, e non è male!
Iniziamo!
Le librerie
Prima di tutto è necessario installare l varie librerie, che sono:
Bluecove: permette al nostro programma Java di interfacciarsi con l'hardware bluetooth del sistema.
Ci servono i file bluecove-2.1.0.jar , bluecove-gpl-2.1.0.jar
WiiRemoteJ: Si tratta di una libreria Java che consente di interfacciare il Wiimote con il programma Java.
Ci serve il file WiiremoteJ.jar
Wrj4p5: Libreria che converte le informazioni ottenute da WiiRemoteJ in qualcosa di più semplice da usare con processing :)
Ci servono Wrj4p5.jar e Loc.jar
Per prima cosa copiamo i file bluecove-2.1.0.jar, bluecove-gpl-2.1.0.jar e WiiRemoteJ.jar nella cartella contenente le librerie di Java. Nel mio caso si trova in /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/
Poi nelle cartella delle librerie di processing (processing-***/libraries) creiamo la cartella wrj4P5 e la sottocartella library.
Qui dentro copiamo i file bluecove-2.1.0.jar, bluecove-gpl-2.1.0.jar, Loc.jar, WiiRemoteJ.jar, wrj4P5.jar.
Finito?
No. E' necessario installare anche il pacchetto libbluetooth-dev, e quindi diamo un bel:
sudo apt-get install libbluetooth-dev
Finito? Sì :D
Il programma
Ed ecco il programma: si tratta dell'esempio sul cubo RGB presente nel sito di Processing modificato in modo da utilizzare i dati di rotazione del Wiimote invece che il mouse per gestire la rotazione.
import lll.wrj4P5.*; //importa libreria
Wrj4P5 wii; //crea un nuovo oggetto
float xmag, ymag = 0;
float newXmag, newYmag = 0;
float x=1;
void setup() {
size(640, 360, P3D);
noStroke();
colorMode(RGB, 1);
wii=new Wrj4P5(this);
wii.connect(); //cerca il wiimote
}
void draw() {
background(0.5);
pushMatrix();
translate(width/2, height/2, -30);
newXmag = (wii.rimokon.senced.x*150)/float(width) * TWO_PI;
newYmag = (wii.rimokon.senced.y*150)/float(height) * TWO_PI;
float diff = xmag-newXmag;
if (abs(diff) > 0.01) { xmag -= diff/4.0; }
diff = ymag-newYmag;
if (abs(diff) > 0.01) { ymag -= diff/4.0; }
rotateX(-ymag);
rotateY(-xmag);
scale(90);
beginShape(QUADS);
fill(0, 1, 1); vertex(-1, 1, 1);
fill(1, 1, 1); vertex( 1, 1, 1);
fill(1, 0, 1); vertex( 1, -1, 1);
fill(0, 0, 1); vertex(-1, -1, 1);
fill(1, 1, 1); vertex( 1, 1, 1);
fill(1, 1, 0); vertex( 1, 1, -1);
fill(1, 0, 0); vertex( 1, -1, -1);
fill(1, 0, 1); vertex( 1, -1, 1);
fill(1, 1, 0); vertex( 1, 1, -1);
fill(0, 1, 0); vertex(-1, 1, -1);
fill(0, 0, 0); vertex(-1, -1, -1);
fill(1, 0, 0); vertex( 1, -1, -1);
fill(0, 1, 0); vertex(-1, 1, -1);
fill(0, 1, 1); vertex(-1, 1, 1);
fill(0, 0, 1); vertex(-1, -1, 1);
fill(0, 0, 0); vertex(-1, -1, -1);
fill(0, 1, 0); vertex(-1, 1, -1);
fill(1, 1, 0); vertex( 1, 1, -1);
fill(1, 1, 1); vertex( 1, 1, 1);
fill(0, 1, 1); vertex(-1, 1, 1);
fill(0, 0, 0); vertex(-1, -1, -1);
fill(1, 0, 0); vertex( 1, -1, -1);
fill(1, 0, 1); vertex( 1, -1, 1);
fill(0, 0, 1); vertex(-1, -1, 1);
endShape();
popMatrix();

0 commenti: