Compartilhar via


Método ID3DXPRTEngine::ComputeBounce

Calcula o radiamento de origem resultante de um único salto de luz inter-inflexionada. Esse método pode ser usado para qualquer cena iluminada, incluindo um modelo prT (transferência de radiação pré-compilado) baseada em SH ( harmônico e esférico).

Sintaxe

HRESULT ComputeBounce(
  [in]      LPD3DXPRTBUFFER pDataIn,
  [in, out] LPD3DXPRTBUFFER pDataOut,
  [in, out] LPD3DXPRTBUFFER pDataTotal
);

Parâmetros

pDataIn [in]

Tipo: LPD3DXPRTBUFFER

Ponteiro para um objeto ID3DXPRTBuffer de entrada que representa o objeto 3D do salto de luz anterior. Esse buffer de entrada deve ter o número adequado de canais de cores alocados para a simulação.

pDataOut [in, out]

Tipo: LPD3DXPRTBUFFER

Ponteiro para um objeto ID3DXPRTBuffer de saída que modela um único salto da luz inter-desviada. Esse buffer de saída deve ter o número adequado de canais de cores alocados para a simulação.

pDataTotal [in, out]

Tipo: LPD3DXPRTBUFFER

Ponteiro para um objeto ID3DXPRTBuffer opcional que é a soma em execução de todas as saídas pDataOut anteriores. Pode ser NULL.

Valor retornado

Tipo: HRESULT

Se o método for bem-sucedido, o valor retornado será D3D_OK. Se o método falhar, o valor retornado poderá ser um dos seguintes: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Comentários

Use a sequência de chamadas a seguir para modelar vários saltos de luz com iluminação direta.

LPD3DXPRTBUFFER pDataA, pDataB, pDataC; // initialization
ID3DXPRTEngine* m_pPRTEngine;

ComputeDirectLightingSH( SHOrder, pDataA );
// The accumulation buffer, pDataC, needs to be 
// initialized to the direct lighting result.

pDataC->AddBuffer( pDataA );
hr = m_pPRTEngine->ComputeBounce( pDataA, pDataB, pDataC ); // first bounce
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, pDataC ); // second bounce
hr = m_pPRTEngine->ComputeBounce( pDataA, pDataB, pDataC ); // third bounce
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, pDataC ); // fourth bounce

Use a sequência de chamadas a seguir para modelar vários saltos de luz com dispersão subsuperficial.

LPD3DXPRTBUFFER pDataA, pDataB, pDataC; // initialization
ID3DXPRTEngine* m_pPRTEngine;
ComputeDirectLightingSH( SHOrder, pDataA );

// *pDataC should be set to zero. The ComputeSS call will add together     
// the direct lighting results from pDataA for non-subsurface scattering 
// elements and subsurface scattering results for the subsurface scattering
// elements. Perform proper error handling for each call.
    
hr = m_pPRTEngine->ComputeSS    ( pDataA, pDataB, pDataC );
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, NULL   ); // first bounce
hr = m_pPRTEngine->ComputeSS    ( pDataA, pDataB, pDataC );
hr = m_pPRTEngine->ComputeBounce( pDataB, pDataA, NULL   ); // second bounce
hr = m_pPRTEngine->ComputeSS    ( pDataA, pDataB, pDataC );

A saída desse método não inclui albedo e apenas a luz de entrada é integrada ao simulador. Ao não multiplicar o albedo, você pode modelar a variação albedo em uma escala mais fina do que a radiação de origem, gerando assim resultados mais precisos da compactação.

Chame ID3DXPRTEngine::MultiplyAlbedo para multiplicar cada vetor PRT pelo albedo.

Requisitos

Requisito Valor
parâmetro
D3DX9Mesh.h
Biblioteca
D3dx9.lib

Confira também

ID3DXPRTEngine

ID3DXPRTEngine::ComputeSS