notJustCode.it
 
\\ Home : Articoli
Superfici
Di robydx (del 24/01/2007 @ 20:59:43, in DirectX9, linkato 2031 volte)

Le superfici in Direct3D potrebbero quasi definirsi un argomento di base dato che compare in molti contesti. Una superficie è una oggetto che rappresenta una zona di memoria in cui è contenuta una immagine. Una superficie si trova dietro ad ogni elemento di Direct3D dato che il backbuffer, lo Z buffer, il front buffer ed addirittura le texture non sono altro che superfici specializzate. Una superficie può lavorare però anche da sola diventanto una specie di sprite ed essere utilizzata per i processi di copia ed incolla di immagini (simili a quelli che si utilizzano in DirectDraw ma meno efficienti). La cosa si presta molto per titoli o per tenere in memoria determinate situazioni (come ad esempio preparare una superficie ed utilizzarla). Ci sono moltissimi modi per creare una superficie, il migliore e più semplice è questo.

Dim s As surface
s = device.CreateOffscreenPlainSurface(640, 480, Format.X8R8G8B8, Pool.Default) SurfaceLoader.FromFile(s, filesrc, Filter.None, 0)

Dichiaro una superficie, la creo tramite il device impostando i parametri ed infine uso l'oggetto surface loader per caricarla da file. Attenzione: per le dimensioni non importa ma il formato deve essere uguale a quello del backbuffer.
Filesrc è il percorso della immagine, filter è il filtro da usare in fase di caricamento mentre lo 0 in fondo è il colore chiave ossia quello che sarà trasparente. Potete usare ad esempio Color.White.ToArgb per generare un intero da un colore.
Pool è simile a quanto spiegato per le texture.
Per copiare una parte di una superficie su di un'altra si usa questa istruzione.

device.StretchRectangle(s, r1, s2, r2, TextureFilter.None)

S e S1 sono due superfici mentre r1 e r2 sono 2 rettangoli che specificano le zone da e dove si copia (Attenzione: heigth e width vengono interpretati come coordinate del punto basso destra del rettangolo non come larghezza). Il filtro serve per migliorare la visualizzazione (per le superfici è però preferibile usare il none per non generare errori).
Il punto dove con maggiore probabilità vorrete copiare una superficie è lo schermo ossia sul backbuffer. Occorre quindi generare la superficie del backbuffer.

Dim backB As Surface
backB = device.GetBackBuffer(0, 0, BackBufferType.Mono)

Ora non vi resta che usare stretchRectangle per copiare la superficie sul backbuffer (o viceversa).
Utilizzando bene i rettangoli potrete rimpicciolire l'immagine o ingrandirla.
Ecco l'esempio.

Esempio

Articolo Articolo  Storico Storico Stampa Stampa
I commenti sono disabilitati.
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché."

Albert Einstein


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 180 persone collegate
Sono state visualizzate  pagine

27/07/2024 @ 05:01:27
script eseguito in 40 ms