Ora credo che sia il momento di iniziare a parlare di alcune librerie che sono in grado di semplificarci la vita durante la programmazione, essendo la wii in fondo una consol che utilizza un ppc processore la cosa importante è poter lavorare con la grafica e non solo con il semplice testo, quindi introduciamo una libreria che ci da la possibilità di lavorare con immagini.
La libreria GRRLIB ci da la possibiltà effettuare alcune elaborazioni di immagine che ci semplificano la stesura del codice, come ad esempio se necessita di una rotazione o cambiamenti di dimensione o saturazione.
per cominiciare vediamo come si comincia per la creazione di uno sfondo a tinta unica con la possibilità di uscire dal programma tramite il click del pulsante “A”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 #include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
 
Mtx GXmodelView2D;
int main(){
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        GRRLIB_FillScreen(0xFF000000);
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
    }
    return 0;
}

Come si può notare dal codice alla riga 10 viene inclusa la libreria GGRLIB, quindi la sorgente deve trovasri nella cartella dove risiede il nostro “main.c”.
Ora durante la lettura del codice saltano subito fuori due nueve funzioni subito dopo l’inizializzazione del Video e Del PAD, queste sono il settaggio standard del video per il buon funzionamento della libreria e lo start della funzione stessa, questa dovremo sempre piazzarle all’inizio del codice in modo da aver la possibilità di utilizzare la libreria, poi abbiamo la funzione “GRRLIB_FillScreen(colore)” che colora di una tinta unica lo schermo, quello che è tra parentesi indica il colore in formato “u32″ e ha il seguente formato: “0xAARRVVBB” tutto espresso in esadecimale.
AA -> il livello alfa (00-FF)
RR -> Importo di Rosso ( 00-FF) RR -> Rosso importo (00-FF)
VV -> Importo di Verde ( 00-FF) GG -> Verde importo (00-FF)
BB -> Importo di Blu ( 00-FF) BB -> Blu importo (00-FF)
Prima di continuare voglio ricordare che la risoluzione della Wii è di 640×480 pixel, ciò significa che i valori dell’asse “X” sono tra 0 e 639 e di tra 0 e 479 per l’asse “Y”, quindi il punto 0,0 è in alto a sinistra.
Ora proviamo a visualizzare un Dot:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
 
Mtx GXmodelView2D;
int main(){
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        GRRLIB_FillScreen(0xFF000000);
        GRRLIB_Plot(100,100,0xFFFFFFFF);
        GRRLIB_Plot(101,100,0xFFFFFFFF);
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
    }
    return 0;
}

Da notare che la funzione ” GRRLIB_Plot(x,y,Col)” è molto semplice basta dargli le cordinate x, y e il colore come visto in precedenza.
Ora prendiamo in considerazione la Funzione per creare una liena sullo schermo, da premettere che sono necessari più parametri, ecco innanzittutto un esempio di codice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
 
Mtx GXmodelView2D;
int main(){
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        GRRLIB_FillScreen(0xFF000000);
        GRRLIB_Line(100,100,200,200,0xFFFFFFFF);
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
    }
    return 0;
}

La funzione “GRRLIB_Line(x1,y1,x2,y2,col)” ci aiuta a creare una linea che parta da un punto (x1,y1) e che arriva al secondo punto (x2,y2) del colore u32 come visto in precedenza.
Lo stesso discorso vale per la creazione di un rettangolo, infatti anche qui abbiamo bisogno di 2 punti, il vertice in altro a sinistra e il vertice in basso a destra e chiaramente il colore desiderato eccovi il solito esempio di codice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 #include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
 
Mtx GXmodelView2D;
int main(){
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        GRRLIB_FillScreen(0xFF000000);
        GRRLIB_Rectangle(100,100,200,100,0xFFFFFFFF,1);
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
    }
    return 0;
}

Ora passiamo alla funzione per il richiamo delle immagini.
La cosa più importante da ricordare è che le iimagini devono essere in formato PNG e devono essere messe in una cartella dove è situata la sorgente, per comodità la chiamiamo “gfx”, un’altra cosa da tener conto è che la larghezza e l’altezza devono essere un multiplo di quattro, prima dell’utilizzo devono essere convertite in variabili, per semplificarci il lavoro il devkitpro ha creato un programma per effettuare la conversione , ad esempio se abbiamo un immagine nella cartella “gfx” con il nome di “miaimmagine.png” dobbiamo dare da terminale questo comando:

1
/(percorso)/devkitPRO/devkitPPC/bin/raw2c /gfx/miaimmagine.png

otterremo alla fine 2 file, “miaimmagine.h” e “miaimmagine.h”, rispettivamente l’header e il file con la variabile dell’immagine, quindi ora non ci resta altro che includere l’header nel nostro codice:

1
#incluse "gfx/miaimmagine.h"

per poter disporre in qualunque momento della nostra immagine.
Ora basta creare una variabile u8 per convertire il pgn in gx con la seguente riga:

1
u8 *tex_miaimmagine=GRRLIB_LoadTexture(miaimmagine);

Ora basta abbiamo a disposizione una funzione che ci dà la possibilità di visualizzare l’immagine dandoci la possibilità anche di ruotare o ridurre o modificare l’alfa dell’immagine stessa:

1
GRRLIB_DrawImg(x, y,larghezza, altezza, the_miaimmagine, rotazione, scalaX, scalaY, alfa );

Spero che i parametri siano facilmente intuitibili, infatti X,Y indicano il vertice in alto a destra (questo solo nel caso non ci siano variazioni nella rotazione o nella riduzione dell’immagine, altrimenti viene preso in considerazione il centro dell’immagine), l’altezza e la larghezza dell’immagine, il nostro tex_file dell’immagine, la rotazione, la riduzione dell’asse x e y ed infine l’alfa dell’immagine che comprende un valore da 0 a 255.
Eccovi un codice che comprende un esempio pratico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
#include "gfx/logo.h"
 
Mtx GXmodelView2D;
int main(){
   u8 *tex_logo=GRRLIB_LoadTexture(logo);
   float rot=0;
   float alpha=255;
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        u32 wpadheld = WPAD_ButtonsHeld(0);
        GRRLIB_FillScreen(0xFF000000);
        GRRLIB_DrawImg(144, 176, 352, 128, tex_logo, rot, 1, 1, alpha );
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
        if (wpadheld & WPAD_BUTTON_RIGHT) rot+=2;
        if (wpadheld & WPAD_BUTTON_LEFT) rot-=2;
        if (wpadheld & WPAD_BUTTON_MINUS) if((alpha-=3)<0) alpha=0;
        if (wpadheld & WPAD_BUTTON_PLUS) if((alpha+=3)>255) alpha=255;
    }
    return 0;
}

Ho voluto complicarvi un po’ la vita inserendo la possibilità di poter ruotare l’immagine tramite i bottoni destro e sinistro o facendo cambiare il valore di alfa tramite i bottoni meno e più, in modo da darvi la possibilità di vedere gli effetti.
Ora passiamo ad un’altra funzione importante se si vuole creare delle animazioni o meglio delle figure in movimento, tutto questo possiamo farlo grazie alla funzione “GRRLIB_DrawTile”, ora abbiamo bisogno di un immagine sempre png con tante piastrelle cioè un immagine con tutte le figure che ci servono.
http://grrlib.santo.fr/wiki/images/perso.png
sempre da ricordare che le misure devono essere mutipli di 4, facciamo la stessa conversione vista in precedenza con raw2c, ottenendo di nuovo i nostri 2 file necessari per poter lavorare con l’immagine.
Da non dimenticare di includere il file Header nel codice, da non dimenticare di creare la variabile u8 con le informazioni dell’immagine, ora possiamo stampare la piastrella da noi voluta grazie a “GRRLIB_DrawTile”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
#include "gfx/perso.h"
 
Mtx GXmodelView2D;
int main(){
   int i=1;
   u8 *tex_perso=GRRLIB_LoadTexture(perso);
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        GRRLIB_FillScreen(0xFF000000);
    GRRLIB_DrawTile(100,100,32,32,tex_perso,0,2,2,255,23,24);
    GRRLIB_DrawTile(200,100,32,32,tex_perso,0,1,1,255,0,24);
    GRRLIB_DrawTile(200,200,32,32,tex_perso,0,1,1,255,i,24);
     if((i++)>6) i=1;
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
    }
    return 0;
}

Ora avremo sullo schermo una figura in movimento, questo grazie alla funzione appena vista, i parametri da tener conto sono sempre gli stessi, le coordinate x,y, l’altezza e la larghezza dell’immagine, il nome del tex_immagine, la rotazione, la scala di x e y, l’alfa ed infine il numero della pistrella che si vuole utilizzare, da ricordare che la numerazione parte da 0 quindi l’ultimo numero è sempre inferiore di uno in confronto al numero effettivo delle piastrelle.
Per concludere passiamo alla possibilità di poter scrivere con GRRLIB, in fondo solo immagini non è tutto, per questo hanno incluso la funzione “GRRLIB_Printf” che ci dà la possibiltà di stampare a video una scritta decidendo le coordinate x,y il tipo di scritta (nella sorgente di GRRLIB è inclusa un solo tipo ma potet crearvene altre facilmente grazie al principio delle piastrelle e raw2c), il colore, la grandezza dei caratteri e il nostro testo da visualizzare.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include
#include
#include
#include
#include
 
#include
#include
#include
#include
#include "GRRLIB/GRRLIB.h"
#include "GRRLIB/fonts/GRRLIB_font1.h"
 
Mtx GXmodelView2D;
int main(){
   u8 *tex_font1=GRRLIB_LoadTexture(GRRLIB_font1);
   int var=55;
    VIDEO_Init();
    WPAD_Init();
    GRRLIB_InitVideo();
    GRRLIB_Start();
    while(1){
        WPAD_ScanPads();
        u32 wpaddown = WPAD_ButtonsDown(0);
        GRRLIB_FillScreen(0xFF000000);
        GRRLIB_Printf(100,100,tex_font1,0xFFFFFFFF,1,"valore var : %d",var);
        GRRLIB_Render();
        if (wpaddown & WPAD_BUTTON_A) exit(0);
    }
    return 0;
}

Con questo esempio concludo le funzioni di questa libreria sperando di essere stato abbastanza chiaro.

Ciriciao alla prossima.

RiujiAndy

Tratto e concesso da: http://ryujiandy.ath.cx/

Related Posts with Thumbnails

Tags: , , , ,

Leave a Reply

Seguici su…

Siti Amici
Tag
Fan su FB