共用方式為


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

這個方法的輸出不包含 albedo,而且只有傳入光線會整合到模擬器中。 藉由不相乘 albedo,您可以比來源弧度更精細地建立 albedo 變化的模型,藉此從壓縮產生更精確的結果。

呼叫 ID3DXPRTEngine::MultiplyAlbedo 以將每個 PRT 向量乘以 albedo。

規格需求

需求
標頭
D3DX9Mesh.h
程式庫
D3dx9.lib

另請參閱

ID3DXPRTEngine

ID3DXPRTEngine::ComputeSS