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: