ID3DXPRTEngine::ComputeBounce 方法

计算单次反转光反射产生的源辐射。 此方法可用于任何照明场景,包括球面调和 (基于 SH) 的预计算辐射传输 (PRT) 模型。

语法

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

参数

pDataIn [in]

类型: LPD3DXPRTBUFFER

指向输入 ID3DXPRTBuffer 对象的指针,该对象表示上一次光线反弹中的 3D 对象。 此输入缓冲区必须具有为模拟分配的适当数量的颜色通道。

pDataOut [in, out]

类型: LPD3DXPRTBUFFER

指向输出 ID3DXPRTBuffer 对象的指针,该对象为单次反射光建模。 此输出缓冲区必须为模拟分配正确数量的颜色通道。

pDataTotal [in, out]

类型: LPD3DXPRTBUFFER

指向可选的 ID3DXPRTBuffer 对象的指针,该对象是以前所有 pDataOut 输出的运行总和。 可以为 NULL

返回值

类型: HRESULT

如果该方法成功,则返回值D3D_OK。 如果方法失败,则返回值可以是下列值之一:D3DERR_INVALIDCALL、E_OUTOFMEMORY。

备注

使用以下调用序列通过直接照明对多个光线反弹进行建模。

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

使用以下调用序列通过地下散射对多个光线反弹进行建模。

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

此方法的输出不包括反照度,并且模拟器中只集成入射光。 通过不乘以反照率,可以比源辐射更精细的比例对反照率变化进行建模,从而产生更准确的压缩结果。

调用 ID3DXPRTEngine::MultiplyAlbedo 将每个 PRT 向量乘以反照度。

要求

要求
标头
D3DX9Mesh.h

D3dx9.lib

另请参阅

ID3DXPRTEngine

ID3DXPRTEngine::computess