Método ID3DXPRTEngine::ComputeBounce

Calcula la radiación de origen resultante de un solo rebote de luz interrrelectada. Este método se puede usar para cualquier escena iluminada, incluido un modelo de transferencia de radiación precalculada (PRT) basado en armónico esférico (SH).

Sintaxis

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

Parámetros

pDataIn [in]

Tipo: LPD3DXPRTBUFFER

Puntero a un objeto ID3DXPRTBuffer de entrada que representa el objeto 3D del rebote de luz anterior. Este búfer de entrada debe tener asignado el número adecuado de canales de color para la simulación.

pDataOut [in, out]

Tipo: LPD3DXPRTBUFFER

Puntero a un objeto ID3DXPRTBuffer de salida que modela un solo rebote de la luz interrrelectada. Este búfer de salida debe tener asignado el número adecuado de canales de color para la simulación.

pDataTotal [in, out]

Tipo: LPD3DXPRTBUFFER

Puntero a un objeto ID3DXPRTBuffer opcional que es la suma en ejecución de todas las salidas pDataOut anteriores. Puede ser NULL.

Valor devuelto

Tipo: HRESULT

Si el método se ejecuta correctamente, el valor devuelto es D3D_OK. Si se produce un error en el método, el valor devuelto puede ser uno de los siguientes: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Comentarios

Use la siguiente secuencia de llamada para modelar varios rebotes de luz con iluminación directa.

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 la siguiente secuencia de llamada para modelar varios rebotes de luz con dispersión de subsurface.

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 );

La salida de este método no incluye albedo y solo la luz entrante está integrada en el simulador. Al no multiplicar el albedo, puede modelar la variación albedo a una escala más fina que la radiación de origen, lo que produce resultados más precisos de la compresión.

Llame a ID3DXPRTEngine::MultiplyAlbedo para multiplicar cada vector PRT por el albedo.

Requisitos

Requisito Value
Encabezado
D3DX9Mesh.h
Biblioteca
D3dx9.lib

Consulte también

ID3DXPRTEngine

ID3DXPRTEngine::Computess