Compartilhar via


Depth Buffering

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Profundidade buferização é uma operação que pára processamento em pixels que são obscurecidos por pixels que já ter sido processado na mesma posição e que sejam nearer to o visualizador. Suporte reserva profundidade do Direct3D Mobile é interrompida processamento em um pixel cujo valor profundidade falha uma testar com o valor profundidade armazenado na reserva profundidade na apontar determinado. Buferização profundidade suporte é controlado por uma variedade de processar estados e requer a existência de uma reserva profundidade.

Buferização profundidade ocorrer operações muito início de fase de rasterization. Mobile Direct3D realiza a testar profundidade tão logo um valor profundidade foi gerado para um pixel por interpolação. Dessa maneira o pixel pode ser descartado antes de qualquer tempo é gasto em desnecessariamente processamento de pixel para os efeitos que nunca podem ser vistos.

Os resultados de testar a reserva profundidade são temporariamente armazenados por pixel para uso em buferização a estêncil testar. Na verdade, processamento reserva estêncil é executado em pixels que falham a testar profundidade, mesmo que nenhum outro processamento pixel é executado. Se o pixel passa a testar reserva profundidade, valor profundidade do pixel é passado mais para baixo o pipeline para o estágio de gravação pixel.

Propriedades de buffer profundidade

A reserva profundidade é um canalizar na reserva a estêncil profundidade. Ele é criado implicitamente como parte a criação de encadear trocar de usar como padrão no dispositivo hora da criação. Para obter mais informações, consulte Criando um dispositivo móvel Direct3D. O formato de reserva de profundidade determina quantos bits estão disponível para buferização profundidade. A reserva profundidade sempre deve ter o mesmo x e y pixel dimensões como o destino processar.

Se uma reserva profundidade não foi criada como parte da criação de dispositivo, em seguida, a funcionalidade reserva profundidade está desativado e pode não estar ativada.

Comparação profundidade

A comparação profundidade ocorre após a conversor de bitmap foi interpolated que tem o valor profundidade para o pixel. Microsoft Direct3D Mobile ® agrupa o valor profundidade correspondente ao que pixel de reserva a profundidade e, em seguida, compara-lo para o valor interpolated usando uma função de comparação profundidade. O valor profundidade de reserva de profundidade é tratado como o valor de referência nesta comparação. Se a função retorna TRUE, em seguida, processamento pixel continuará. Se a função retorna FALSE, processamento para o pixel é interrompido imediatamente e o próximo pixel é processada.

O valor de processar esses estados podem ser definidos chamado com os sinalizadores D3DMRS_SCOPESCALEDEPTHBIAS e D3DMRS_DEPTHBIAS que contém o apropriado valores.

Você pode especificar qual função de comparação camadas a serem usadas, chamado o método IDirect3DMobileDevice::SetRenderState e configuração de estado processar D3DMRS_ZFUNC (consulte D3DMRENDERSTATETYPE) para um valor a partir de D3DMCMPFUNC enumeração.

Z e W buffer

Drivers Mobile Direct3D podem suporte ou buferização Z W buferização. Você pode definir um valor para o estado processar D3DMRS_ZENABLE para indicar qual tipo de profundidade buferização você preferir usar no seu aplicativo.

Profundidade Biasing

Quando dois primitivos são coplanar é nenhuma um tem uma prioridade processamento inerente sobre as outras. Este resulta em um efeito sabe como Z e combatendo onde os duas primitivos podem aparecer sangramento por um outro.

Para ajudar a atenuar combatendo Z, Direct3D Mobile permite que você adicionar profundidade valor de um biasing fator pixel antes que ele seja testada contra o valor na reserva de profundidade. A profundidade biasing suporte na Direct3D Mobile é semelhante à implementação DirectX 9 para área de trabalho Windows-Based estados sistemas em que ele usa a processar D3DMRS_DEPTHBIAS e D3DMRS_SLOPESCALEDEPTHBIAS.

No Mobile Direct3D há dois valores biasing que podem ser definidos, D3DMRS_SLOPESCALEDEPTHBIAS e os estados processar D3DMRS_DEPTHBIAS – ambos os quais podem ser usados para calcular o deslocamento profundidade. O deslocamento é adicionado ao valor profundidade interpolated do primitivo para gerar um valor final profundidade que é usado para testes profundidade.

O deslocamento utilizado para biasing cálculos é definido como o seguinte:

Offset = m * D3DMRS_SLOPESCALEDEPTHBIAS + D3DMRS_DEPTHBIAS

Onde m é a inclinação profundidade máxima do triângulo sendo processado e é definido como:

m = max(abs( delta z / delta x ), abs( delta z / delta y ))

Você pode habilitar profundidade biasing pode ser habilitado por valores configuração para um ou ambos esses estados processar. O valor usar como padrão para ambos os estados processar é zero. A definição dois estados processar como zero desativa profundidade biasing. As unidades para os estados processar D3DMRS_DEPTHBIAS e D3DMRS_SLOPESCALEDEPTHBIAS dependem se o aplicativo usa Z-buferização ou W-buferização. O aplicativo deve fornecer os valores adequados.

Inclinação profundidade não será aplicada a apontar ou linha primitivos. No entanto, INCLINAÇÃO não precisa ser aplicado a triângulos desenhados no modo esboço.

See Also

Concepts

Per Pixel Operations