* * * *
8 Visitatori, 1 Utente
 

Per mostrare la grafica sullo schermo, il Nintendo DS utilizza una struttura a strati, chiamati anche layer o background. Il programmatore ha a disposizione un determinato numero di background che possono essere mostrati contemporaneamente su ciascuno dei due schermi, a seconda della modalità grafica impostata. Esistono 5 tipologie differenti di background:

  • framebuffer: questo tipo di background è disponibile solo per il motore principale. Dà la possibilità di scavalcare il motore grafico del NDS e di gestire direttamente ogni singolo pixel dello schermo, sul quale viene mappata una regione di memoria. Questa corrispondenza diretta schermo-memoria permette di accedere ai pixel come se si trattasse di un array di 256*192 valori a 16 bit (ogni pixel richiede 2 bytes, per un totale di 96 KB di memoria occupata), ciascun elemento del quale contiene le informazioni di colore del pixel a cui fa riferimento (5 bit per il rosso, 5 per il verde e 5 per il blu; l'ultimo bit non è usato). Questa modalità non permette l'utilizzo contemporaneo degli sprites e viene solitamente utilizzata per mostrare a schermo delle animazioni con la tecnica del double buffering.
  • text: viene anche detto tile background, perché è diviso in blocchi di 8x8 pixel, detti tiles (in italiano "mattonelle", "piastrelle", "tessere"), a 16 o 256 colori. La memoria deve essere impostata in modo tale da contenere sia le singole tessere, cioè le immagini grafiche vere e proprie, sia la mappa, cioè lo schema che permette di posizionare correttamente una determinata tessera su di un punto specifico dello schermo. Questo tipo di background supporta un massimo di 64x64 tessere (o 512x512 pixel); le mappe vengono gestite in blocchi di grandezza 32x32, organizzati in zone consecutive di memoria. In tabella sono descritte le varie tipologie di background di tipo text con i relativi defines per impostarle.

    Tipologia
    : BgType_Text4Bpp, BgType_Text8Bpp

    PIXELS MAP SIZE TILES LAYOUT DEFINE
    256 x 256 2 kb 32 x 32 BgSize_T_256x256
    256 x 512 4 kb 32 x 64 BgSize_T_256x512
    512 x 256 4 kb (32 x 32) + (32 x 32) BgSize_T_512x256
    512 x 512 8 kb (32 x 32) + (32 x 32) + (32 x 32) + (32 x 32) BgSize_T_512x512

  • rotation:si tratta di un background a tessere che può essere anche scalato e ruotato; viene spesso chiamato text affine background. Questo tipo di background supporta un massimo di 128x128 tile (1024x1024 pixel) e utilizza mappe a 8 bit. In questo caso, le mappe non vengono gestite a blocchi, ma in maniera sequenziale, come i pixel nel framebuffer.

    Tipologia: BgType_Rotation
    PIXELS MAP SIZE TILES LAYOUT DEFINE
    128 x 128 256 bytes 16 x 16 BgSize_R_128x128
    256 x 256 1 kb 32 x 32 BgSize_R_256x256
    512 x 512 4 kb 64 x 64
    BgSize_R_512x512
    1024 x 1024 16 kb 128 x 128
    BgSize_R_1024x1024

  • extended rotation: Detto anche extended affine background, può essere utilizzato come un semplice background di tipo rotation, oppure come background di tipo bitmap, che funziona come un semplice framebuffer, con la differenza sostanziale che può contare sugli effetti hardware gestiti dal motore grafico. Sono supportate immagini bitmap a 8 e a 16 bit, più grandi o più piccole dello schermo, sulle quali è possibile effettuare spostamenti, zoom, rotazioni, direttamente via hardware, tramite l'utilizzo di alcuni registri. Nel caso di utilizzo di immagini a 16 bit, il bit 15 (da ricordare che si comicia a contare da 0!) servirà per impostare la trasparenza.

    Tipologia
    : BgType_ExRotation
    PIXELS MAP SIZE TILES LAYOUT DEFINE
    128 x 128 256 bytes 16 x 16 BgSize_R_128x128
    256 x 256 1 kb 32 x 32 BgSize_R_256x256
    512 x 512 4 kb 64 x 64
    BgSize_R_512x512
    1024 x 1024 16 kb 128 x 128
    BgSize_R_1024x1024

    Tipologia: BgType_Bmp8, BgType_Bmp16
    PIXELS MAP SIZE (8bpp) DEFINE MAP SIZE (16bpp) DEFINE
    128 x 128 16 kb BgSize_B8_128x128 32 kb BgSize_B16_128x128
    256 x 256 64 kb BgSize_B8_256x256 128 kb BgSize_B16_256x256
    512 x 256
    128 kb BgSize_B8_512x256 256 kb BgSize_B16_512x256
    512 x 512 256 kb BgSize_B8_512x512 512 kb BgSize_B16_512x512

  • 3d:Permette di gestire scene 3D direttamente via hardware. La libreria mette a disposizione una serie di funzioni del tutto simili alla libreria 3D OpenGL. Questo background è disponibile solo per il motore principale.

Una cosa importante da sapere è che ognuno dei due motori grafici può mostrare contemporaneamente a schermo un numero massimo di 4 background. Inoltre il motore principale può muovere delle scene 3D, ma solamente sul background 0.

In aggiunta ai layer per i background esiste un ulteriore layer che viene utilizzato per gli sprites, cioè tutte quelle parti grafiche in movimento che sono tipiche dei giochi 2D: si pensi alle navicelle spaziali di Space Invaders oppure ai fantasmini di Pacman. Parleremo più approfonditamente della gestione di questo layer più avanti.


Le modalità grafiche

Come già accennato, lo schermo del Nintendo DS mette a disposizione diverse modalità grafiche di funzionamento, ognuna delle quali dotata di una differente combinazione di background.


Mode 0
4 background text
Mode 1 3 background text + 1 background rotation
Mode 2 2 background text + 2 background rotation
Mode 3
3 background text + 1 background extended rotation
Mode 4 2 background text + 1 background rotation + 1 background extended rotation
Mode 5 2 background text + 2 background extended rotation
Mode 6 1 background text + 1 background extended rotation di 1024x512 (o 512x1024),
disponibile solo per il motore principale

Nella tabella seguente sono schematizzate tutte le modalità grafiche, con le tipologia di background disponibili e il motore (main o sub) con il quale si possono utilizzare.


MODE DEFINES MAIN SUB BG0 BG1 BG2 BG3
0
MODE_0_2D/MODE_0_3D
Text / 3D Text Text Text
1 MODE_1_2D/MODE_1_3D Text / 3D Text Text Rotation
2 MODE_2_2D/MODE_2_3D Text / 3D Text Rotation Rotation
3 MODE_3_2D/MODE_3_3D Text / 3D Text Text Extended
4 MODE_4_2D/MODE_4_3D Text / 3D Text Rotation Extended
5 MODE_5_2D/MODE_5_3D Text / 3D Text Extended Extended
6 MODE_6_2D/MODE_6_3D no Text / 3D Extended (1024x512 o 512x1024)
FRAMEBUFFER:

MODE_FB0 no accesso diretto al video dalla memoria principale

MODE_FB1 no accesso diretto al video da VRAM_A in modalità LCD

MODE_FB2 no accesso diretto al video da VRAM_B in modalità LCD

MODE_FB3 no accesso diretto al video da VRAM_C in modalità LCD


Come si è già accennato, la modalità 3D è disponibile nativamente solo sul motore principale e solo sul background 0; inoltre è possibile attivare il 3D in ogni modalità video, eccezion fatta per la modalità framebuffer. Utilizzando degli artifici è possibile visualizzare delle scene tridimensionali su entrambi gli schermi, ma al costo di un dimezzamento del frame rate.


Per commenti e chiarimenti: http://www.lazaruspascal.it/index.php?topic=78.0


Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

Articles in « Free Pascal per DS »

Comments *

Commenting option has been turned off for this article.

Recenti

How To

Trascinare un file nel programma da xinyiman
DB concetti fondamentali e ZeosLib da xinyiman
Recuperare codice HTML da pagina web da xinyiman
Mandare mail con Lazarus da xinyiman
Stabilire il sistema operativo da xinyiman
Esempio lista in pascal da xinyiman
File INI da xinyiman
Codice di attivazione da xinyiman
Realizzare programmi multilingua da xinyiman
Lavorare con le directory da xinyiman
Utilizzare Unità esterne da Loryea
TTreeView da xinyiman
TTreeview e Menu da xinyiman
Generare controlli RUN-TIME da xinyiman
LazReport, PDF ed immagini da xinyiman
Intercettare tasti premuti da xinyiman
Ampliare Lazarus da xinyiman
Lazarus e la crittografia da xinyiman
System Tray con Lazarus da xinyiman
UIB: Unified Interbase da Microges2000
Il file: questo sconosciuto da Microges2000
Conferma di chiusura di un applicazione da xinyiman
Liste e puntatori da Microges2000
Overload di funzioni da Microges2000
Funzioni a parametri variabili da Microges2000
Proprietà da Microges2000
Conversione numerica da Microges2000
TImage su Form e Panel da Maverich
Indy gestiore server FTP lato Client da Maverich
PopUpMenu sotto Pulsante (TSpeedButton) da Maverich
Direttiva $macro da Microges2000
Toolbar da xinyiman
Evidenziare voci TreeView da Maverich
Visualizzare un file Html esterno da Maverich
StatusBar - aggirare l'errore variabile duplicata da Maverich
Da DataSource a Excel da xinyiman
Le permutazioni da xinyiman
Brute force da xinyiman
Indy 10 - Invio email con allegati da Maverich
La gestione degli errori in Lazarus da xinyiman
Pascal Script da xinyiman
Linux + Zeos + Firebird da xinyiman
Dataset virtuale da xinyiman
Overload di operatori da Microges2000
Lavorare con file in formato JSON con Lazarus da nomorelogic
Zeos ... dietro le quinte (prima parte) da Stilgar
Disporre le finestre in un blocco unico (come Delphi) da Maverich
Aspetto retrò (Cmd Line) da xinyiman
Come interfacciare periferica twain da Narciso
Ubuntu - aggiornare free pascal e lazarus da xinyiman
fpcup: installazioni parallele di lazarus e fpc da nomorelogic
Free Pascal e Lazarus sul Raspberry Pi da nomorelogic
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal. da nomorelogic
Creare un server multithread da xinyiman
guida all'installazione di fpc trunk da subversion in linux gentoo da nomorelogic
Indice da nomorelogic
DB concetti fondamentali e connessioni standard da xinyiman
Advanced Record Syntax da nomorelogic
DB concetti fondamentali e DBGrid da xinyiman
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText da xinyiman
Advanced Record Syntax: un esempio pratico da nomorelogic
Superclasse form base per programmi gestionali (e non) da nomorelogic
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox da nomorelogic
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form da nomorelogic
Superclasse form base per programmi gestionali (e non) #4 - wait animation da nomorelogic
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog da nomorelogic
Installare lazarus su mac osx sierra da xinyiman
Utenti
Stats
  • Post in totale: 10562
  • Topic in totale: 1343
  • Online Today: 15
  • Online Ever: 74
  • (Luglio 09, 2012, 11:05:53 am)
Utenti Online
Users: 1
Guests: 8
Total: 9

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.