|
HRESULT RenderSceneIntoEnvMap()
{ HRESULT hr; // 设置投影矩阵
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI * 0.5f, 1.0f, 0.5f, 1000.0f );
// 得到当前观察矩阵
D3DXMATRIXA16 matViewDir( m_matView );
matViewDir._41 = 0.0f; matViewDir._42 = 0.0f; matViewDir._43 = 0.0f;
// 把场景绘制到Cube Map上
if( m_pCubeMap )
hr = m_pRenderToEnvMap->BeginCube( m_pCubeMap );
if(FAILED(hr))
return hr;
for( UINT i = 0; i < 6; i++ )
{
// 设置Cube Map中的一个面为当前的渲染目标
m_pRenderToEnvMap->Face( (D3DCUBEMAP_FACES) i, 0 );
// 计算新的观察矩阵
D3DXMATRIXA16 matView;
matView = D3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) i );
D3DXMatrixMultiply( &matView, &matViewDir, &matView );
// 设置投影和观察矩阵并渲染场景(省略)。注意:这里的渲染场景中的物体并不包括使用环境贴图的物体。... ... }
m_pRenderToEnvMap->End( 0 );
return S_OK;
}
上面是动态生成立方体贴图的代码部分,不知道 D3DXMatrixMultiply( &matView, &matViewDir, &matView )这个函数,为什么是matViewDir乘以matView而不是matView乘以matViewDir,还有为什么视图矩阵不直接用matView就行了,干嘛还和当前眼睛视图矩阵相乘。 [em1] |
|