Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Antialiasing de cena completa refere-se a borrar as bordas de cada polígono na cena à medida que é rasterizado em uma única passagem; não é necessária uma segunda passagem. A suavização de cena completa, quando suportada, afeta apenas triângulos e grupos de triângulos. As linhas não podem ser suavizadas usando os serviços Direct3D. A suavização completa da cena é feita no Direct3D usando a multiamostragem em cada pixel. Quando a multiamostragem está habilitada, todas as subamostras de um pixel são atualizadas em uma passagem, mas quando usadas para outros efeitos que envolvem várias etapas de renderização, o aplicativo pode especificar que apenas algumas subamostras devem ser afetadas por uma determinada passagem de renderização. Esta última abordagem permite a simulação de distorção de movimento, profundidade de campo, desfoque de reflexo e outros efeitos semelhantes.
Em ambos os casos, as várias amostras gravadas para cada pixel são misturadas e saídas para a tela. Isso permite a melhoria da qualidade de imagem de antialiasing ou de outros efeitos.
Antes de criar um dispositivo com o método IDirect3D9::CreateDevice, é necessário determinar se o antialiasing de cena completa é suportado. Faça isso chamando o IDirect3D9::CheckDeviceMultiSampleType método, conforme mostrado no exemplo de código abaixo.
/*
* The code below assumes that pD3D is a valid pointer
* to a IDirect3D9 interface.
*/
if( SUCCEEDED(pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL , D3DFMT_R8G8B8, FALSE,
D3DMULTISAMPLE_2_SAMPLES, NULL ) ) )
// Full-scene antialiasing is supported. Enable it here.
O primeiro parâmetro que IDirect3D9::CheckDeviceMultiSampleType aceita é um número ordinal que indica o adaptador de vídeo a ser consultado. Este exemplo usa D3DADAPTER_DEFAULT para especificar o adaptador de vídeo primário. O segundo parâmetro é um valor do tipo enumerado D3DDEVTYPE, especificando o tipo de dispositivo. O terceiro parâmetro especifica o formato da superfície. O quarto parâmetro informa ao Direct3D se deve perguntar sobre multiamostragem de janela inteira (TRUE) ou antialiasing de cena completa (FALSE). Este exemplo usa FALSE para informar ao Direct3D que está a perguntar sobre antialiasing de cena completa. O último parâmetro especifica a técnica de amostragem múltipla que você deseja testar. Use um valor do D3DMULTISAMPLE_TYPE tipo enumerado. Este exemplo testa para ver se dois níveis de multiamostragem são suportados.
Se o dispositivo suportar o nível de multiamostragem que você deseja usar, a próxima etapa é definir os parâmetros de apresentação preenchendo os membros apropriados da estrutura D3DPRESENT_PARAMETERS para criar uma superfície de renderização de várias amostras. Depois disso, você pode criar o dispositivo. O código de exemplo abaixo mostra como configurar um dispositivo com uma superfície de renderização de várias amostras.
/*
* The example below assumes that pD3D is a valid pointer
* to a IDirect3D9 interface, d3dDevice is a pointer to a
* IDirect3DDevice9 interface, and hWnd is a valid handle
* to a window.
*/
D3DPRESENT_PARAMETER d3dPP
ZeroMemory( &d3dPP, sizeof( d3dPP ) );
d3dPP.Windowed = FALSE
d3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &d3dDevice)
Para usar a amostragem múltipla, o membro SwapEffect do D3DPRESENT_PARAMETER deve ser definido como D3DSWAPEFFECT_DISCARD.
O último passo é ativar o antialiasing de multiamostragem chamando o método IDirect3DDevice9::SetRenderState e definindo o D3DRS_MULTISAMPLEANTIALIAS como TRUE. Depois de definir esse valor como TRUE, qualquer renderização que você fizer terá várias amostragens aplicadas a ela. Talvez você queira habilitar e desabilitar a multiamostragem, dependendo do que estiver renderizando.
Tópicos relacionados