notJustCode.it
 
\\ Home : Articoli
Sprite
Di robydx (del 20/06/2007 @ 22:16:16, in Direct3D10, linkato 2455 volte)

Uno sprite è una immagine bidimensionale all'interno della scena, solitamente utilizzata per visualizzare menù (esempio la barra della vita nei giochi). In Direct3D lo sprite è un rettangolo 3D orientato permanentemente verso la telecamera e renderizzato in modo da superare depth test (il calcolo della profondità). Il risultato è un oggetto sempre in primo piano che dà l'aspetto di una immagine bidimensionale. La classe ID3DX10Sprite è un set di funzioni di utilità che gestiscono questo tipo di rendering.

Renderizzare tramite sprite permette di non doversi preoccupare di nulla, rendendo l'operazione estremamente semplice (simile a quanto visto per i font). A differenza di quanto avveniva in Direct3D9 è possibile renderizzare più sprite con una sola chiamata alla funzione. Un'altra differenza è che ora le coordinate sono in unità directX e non in pixel. Questo significa che uno sprite con dimensione 1 occupa 1/4 dello schermo che ha dimensione 2x2. Questo semplifica la vita per sprite che devono avere dimensione indipentente dalla risoluzione ma complica la vita quando si devono fare rendering precisi al pixel. In questo caso proporzioni ed un pò di matematica aiutano allo scopo.

 

L'inizializzazione dell'oggetto ID3DX10Sprite richiede semplicemente l'utilizzo del device

ID3DX10Sprite* sprite;

HRESULT hr= D3DX10CreateSprite(device->GetDevice(),bufferSize,&this->sprite);

la variabile bufferSizeserve per indicare al controller il numero massimo di sprite che renderizzeremo (in modo da ottimizzarne la gestione).

Creata la variabile questa richiede l'attivazione tramite istruzione Begin. Tutti gli sprite andranno renderizzati tra l'istruzione Begin ed End dello sprite.

sprite->Begin(0);

//rendering

sprite->End();

Il parametro nel begin indica l'opzione di rendering degli sprite. Oltre a zero esistono

 

D3DX10_SPRITE_SORT_TEXTURE
D3DX10_SPRITE_SORT_DEPTH_BACK_TO_FRONT
D3DX10_SPRITE_SORT_DEPTH_FRONT_TO_BACK

Per ordinare le texture in fase di rendering (le ultime utilizzano la distanza zero come ZOrder).

A questo punto è possibile renderizzare gli sprite tra i due blocchi. Uno sprite è una immagine salvata in una texture2D di Direct3D10. Le stesse texture usate per i modelli possono essere usate anche per gli sprite.

Per renderizzare si utilizzano due istruzioni,

  • DrawSpritesImmediate
  • DrawSpritesBuffered

La seconda istruzione serve per il rendering di grandi quantità di sprite che vengono ottimizzati

L'istruzione DrawSpritesImmediate prende come input la definizione degli sprite (ossia un array che descrive caratteristiche degli sprite), il numero di sprite da renderizzare e due valori comunemente impostati a zero.

 

D3DX10_SPRITE spriteDesc;
spriteDesc.ColorModulate=D3DXCOLOR(1,1,1,1);

spriteDesc.matWorld=mat1;
spriteDesc.pTexture=tex->GetResource();
spriteDesc.TexCoord=D3DXVECTOR2(x,y);
spriteDesc.TexSize=D3DXVECTOR2(width,height);
spriteDesc.TextureIndex=0;

Questo è un esempio di struttura D3DX10_SPRITE per la descrizione di uno sprite.

Come vedete si passano vari parametri

  • matWorld: la matrice world usata per posizionare l'oggetto. L'asse di rotazione è l'asse Z 
  • TexCoord: in coordinate texture la posizione di inizio della texture da visualizzare
  • TexSize: in coordinate texture la dimensione della texture da visualizzare 
  • ColorModulate: un colore che viene moltiplicato per il colore dello sprite modificandolo
  • pTexture: il puntatore alla ResourceView contenente la texture. Può essere una texture2D o un array di texture2D 
  • TextureIndex: nel caso di array di texture contiene l'indice della texture da usare, 0 per texture normali

 

L'istruzione buffered invece prende come parametri solo la descrizione degli sprite ed il numero di questi.

Per renderizzare sprite con porzioni trasparenti è necessario creare texture con valori di alpha pari a zero o ad uno. Questo permetterà di creare sprite con forma non quadrata.

 

 Vi lascio al demo

Articolo Articolo  Storico Storico Stampa Stampa
I commenti sono disabilitati.
"L'abbiamo appena finito, ma possiamo farlo meglio! "

Shigeru Miyamoto


Cerca per parola chiave
 

Titolo
Articoli (4)
C++ (4)
Direct3D10 (30)
Direct3D11 (20)
DirectX9 (82)
DotNet (10)
English (9)
FanGames (22)
ManagedDX11 (2)
Materiale Utile (4)
News (39)
Shader Library (12)
SharpDX (1)
Software (25)
Tecnologia (19)
Varie (9)

Gli interventi più cliccati

Ultimi commenti:
If you wish to retai...
23/05/2013 @ 13:07:45
Di chanel outlet
You deficit of self-...
23/05/2013 @ 13:07:13
Di cartier watches uk
Reinforce your own l...
23/05/2013 @ 13:06:37
Di replica watches
Whenever you"re shiv...
23/05/2013 @ 13:06:11
Di swiss replica watches
It's likely you have...
23/05/2013 @ 13:05:02
Di chanel handbags
Cheap automobile ins...
23/05/2013 @ 13:04:28
Di replica watches

Titolo
Con quale tecnologia state realizzando o avete intenzione di realizzare i vostri progetti?

 DirectX11
 DirectX10
 DirectX9
 XNA
 DirectX8 o Precedenti
 OpenGL
 Motori grafici già pronti
 Altro

Titolo
Umorismo (17)

Le fotografie più cliccate



Ci sono 15 persone collegate
Sono state visualizzate  pagine

16/08/2022 @ 05:20:28
script eseguito in 43 ms