次の方法で共有


ID3DXPRTEngine::ComputeBounce メソッド

相互反射光の単一のバウンスに起因するソースの放射輝度を計算します。 この方法は、球面調和(SH)ベースの事前計算済みの放射転送(PRT)モデルを含む、任意の点灯シーンに使用できます。

構文

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

パラメーター

pDataIn [in]

種類: LPD3DXPRTBUFFER

前のライト バウンスからの 3D オブジェクトを表す入力 ID3DXPRTBuffer オブジェクトへのポインター。 この入力バッファーには、シミュレーションに適切な数のカラー チャネルが割り当てられている必要があります。

pDataOut [in, out]

種類: LPD3DXPRTBUFFER

相互反射光の単一のバウンスをモデル化する出力 ID3DXPRTBuffer オブジェクトへのポインター。 この出力バッファーには、シミュレーションに適切な数のカラー チャネルが割り当てられている必要があります。

pDataTotal [in, out]

種類: LPD3DXPRTBUFFER

以前のすべての pDataOut 出力の実行合計である省略可能な ID3DXPRTBuffer オブジェクトへのポインター。 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