ID3DXPRTEngine::ComputeBounce-Methode
Berechnet die Strahlkraft der Quelle, die sich aus einem einzelnen Sprung von interreflektiertem Licht ergibt. Diese Methode kann für jede beleuchtete Szene verwendet werden, einschließlich eines sphärischen harmonischen (SH)-basierten PRT-Modells (Precomputed Radiance Transfer).
Syntax
HRESULT ComputeBounce(
[in] LPD3DXPRTBUFFER pDataIn,
[in, out] LPD3DXPRTBUFFER pDataOut,
[in, out] LPD3DXPRTBUFFER pDataTotal
);
Parameter
-
pDataIn [in]
-
Typ: LPD3DXPRTBUFFER
Zeiger auf ein ID3DXPRTBuffer-Eingabeobjekt , das das 3D-Objekt aus dem vorherigen Lichtsprung darstellt. Dieser Eingabepuffer muss über die richtige Anzahl von Farbkanälen verfügen, die der Simulation zugeordnet sind.
-
pDataOut [in, out]
-
Typ: LPD3DXPRTBUFFER
Zeiger auf ein ID3DXPRTBuffer-Ausgabeobjekt , das einen einzelnen Sprung des interreflektierten Lichts modelliert. Dieser Ausgabepuffer muss über die richtige Anzahl von Farbkanälen verfügen, die der Simulation zugeordnet sind.
-
pDataTotal [in, out]
-
Typ: LPD3DXPRTBUFFER
Zeiger auf ein optionales ID3DXPRTBuffer-Objekt , das die ausgeführte Summe aller vorherigen pDataOut-Ausgaben darstellt. Kann NULL sein.
Rückgabewert
Typ: HRESULT
Wenn die Methode erfolgreich ist, wird der Rückgabewert D3D_OK. Wenn die Methode fehlschlägt, kann der Rückgabewert einer der folgenden Sein: D3DERR_INVALIDCALL, E_OUTOFMEMORY.
Bemerkungen
Verwenden Sie die folgende Aufrufsequenz, um mehrere Lichtsprünge mit direkter Beleuchtung zu modellieren.
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
Verwenden Sie die folgende Aufrufsequenz, um mehrere Lichtsprünge mit Streuung unter der Oberfläche zu modellieren.
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 );
Die Ausgabe dieser Methode enthält keine Albedo, und nur eingehendes Licht ist in den Simulator integriert. Wenn Sie die Albedo nicht multiplizieren, können Sie die Albedovariation in einem feineren Maßstab als die Quellstrahlung modellieren und so genauere Ergebnisse der Komprimierung erzielen.
Rufen Sie ID3DXPRTEngine::MultiplyAlbedo auf, um jeden PRT-Vektor mit dem Albedo zu multiplizieren.
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|
Siehe auch