ID3DXPRTEngine::ComputeSS 方法
使用 ID3DXPRTEngine::SetMeshMaterials 设置的材料属性计算地下散射产生的源辐射。 此方法只能用于网格对象中每个顶点定义的材料。
语法
HRESULT ComputeSS(
[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。
备注
若要为地下散射建模,请在调用 ID3DXPRTEngine::ComputeDirectLighting 方法后对每次光线反弹调用此方法。
使用以下调用序列为地下散射建模。
LPD3DXPRTBUFFER pDataA, pDataB, pDataC; // initialization
ID3DXPRTEngine* m_pPRTEngine;
hr = 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.
hr = m_pPRTEngine->ComputeSS( pDataA, pDataB, pDataC );
if ( FAILED( hr ) ) goto Exit;
此方法的输出不包括反照度,并且模拟器中只集成入射光。 通过不乘以反照率,可以比源辐射更精细的比例对反照率变化进行建模,从而产生更准确的压缩结果。
调用 ID3DXPRTEngine::MultiplyAlbedo ,将 PRT) 矢量的每个预计算辐射传输 (反照度相乘。
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅