notJustCode.it
 
\\ Home : Articoli
Rasterizer State
Di robydx (del 06/03/2010 @ 11:14:17, in Direct3D11, linkato 2162 volte)

Il rastering è il processo che partendo dalla descrizione dei poligoni (in Direct3D solo di tipo triangolare), genera a video i triangoli. Nei precedenti tutorial è già stato spiegato in teoria come funziona il processo: il vertex shader valorizza i vertici, il rasterizer calcola tutti i pixel necessari per riempire il triangolo e per ognuno di questi fa una media pesata tra i 3 vertici in base alla posizione mandando il risultato al pixel shader. I settaggi vengono inseriti in un oggetto ID3D11RasterizerState

ID3D11RasterizerState * rasterState;

D3D11_RASTERIZER_DESC rasterizerState;

rasterizerState.FillMode = D3D11_FILL_SOLID;

rasterizerState.CullMode = D3D11_CULL_FRONT;

rasterizerState.FrontCounterClockwise = true;

rasterizerState.DepthBias = 0;

rasterizerState.DepthBiasClamp = 0;

rasterizerState.SlopeScaledDepthBias = 0;

rasterizerState.DepthClipEnable = true;

rasterizerState.ScissorEnable = true;

rasterizerState.MultisampleEnable = false;

rasterizerState.AntialiasedLineEnable = false;

HRESULT hr = device->CreateRasterizerState( &rasterizerState, &rasterState);

Queste istruzioni creano un rasterizerState che passate al deviceContext tramite istruzione RSSetState

deviceContext->RSSetState(rasterState);

Passando NULL il settaggio tornerà al default di Direct3D11

deviceContext->RSSetState(NULL);

Come potete vedere il rasterizer viene inizializzato impostando i vari valori (nel nostro caso il fillmode è stato impostato come solid). Le variabili non impostate saranno valorizzate con il valore di default. I campi da utilizzare sono i sequenti

  • FILLMODE : indica come andranno riempite le primitive. Le opzioni sono SOLID (il settaggio di default) che riempie normalmente il triangolo e WIREFRAME che visualizza solamente le linee, lasciando vuoto il centro
  • CULLMODE : specifica se i poligoni saranno invisibili se inquadrati da davanti (FRONT), da dietro (BACK) o in entrambi i casi (NONE).
  • FRONTCOUNTERCLOCKWISE : specifica la direzione considerata frontale per i triangoli. Con TRUE il triangolo sarà frontale se i vertici sono disposti in senso antiorario, con false in senso orario
  • DEPTHBIAS : è un valore intero di profondità che viene aggiunto ai pixel. Su scene molto grandi può capitare che oggetti a profondità molto vicine abbiano degli artefatti dovuti alla limitata precisione dello ZBUFFER. Anche su scene piccole se 2 oggetti hanno la stessa profondità (2 cubi coincidenti ad esempio) si verificherà che in alcuni punti il primo copre il secondo, in altri il secondo copre il primo. Con questo settaggio lo zbuffer viene valorizzato con un valore diverso da quello calcolato e potrete dare priorità agli oggetti.
  • DEPTHBIASCLAMP : è un float che indica il valore massimo di profondità inseribile sullo Zbuffer. Farà in modo che oggetti oltre una certa distanza abbiano profondità uguale
  • SLOPESCALEDDEPTHBIAS : permette di scalare i settaggi del bias (ad esempio lasciare i primi invariati ed usare questo in base alla distanza dalla camera)
  • ZCLIPENABLE : se impostato a TRUE (default) fa in modo che nulla oltre lo ZFAR impostato nella projection matrix sia visibile (un grande risparmio in tempo di elaborazione per oggetti che oltre una certa distanza non sarebbero comunque visibile).
  • SCISSORENABLE : attiva gli scissor, rettangoli che impediscono il rendering dei pixel fuori di essi.
  • MULTISAMPLEENABLE : attiva il multisample (per utilizzare l’antialiasing, richiede una superficie creata con multisample attivato)
  • ANTIALIASEDLINEENABLE : attiva il line antialiasing, un sistema che migliora il rendering delle linee. Si può attivare solo se il multisample è impostato a false e l’oggetto è una linelist o linestrip

Per impostare gli scissor si utilizza l’istruzione RSSetScissorRects, che permette di passare n rettangoli. In questo caso ne è stato passato solo 1 che limiterà a 640 x 480 la scena.

D3D11_RECT rects[1];

rects[0].left = 0;

rects[0].right = 640;

rects[0].top = 0;

rects[0].bottom = 480;

deviceContext->RSSetScissorRects( 1, rects );

Articolo Articolo  Storico Storico Stampa Stampa
I commenti sono disabilitati.
"Technology can do little for people who have nothing to say."

Eric Auchard


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

29/03/2024 @ 13:33:48
script eseguito in 47 ms