HRESULT KG3DPointLightShadow::ComputeCubeMapForPosition(D3DXVECTOR3 vPosition,KG3DScenePvsEditor* pScene,LPDIRECT3DCUBETEXTURE9 pCubeColor,LPDIRECT3DCUBETEXTURE9 pCubeDepth,KG3DRenderTargetTool* pToolColor,KG3DRenderTargetTool* pToolDepth) { HRESULT hr = E_FAIL; for( UINT i = 0; i < 6; i++ ) { // Set the view transform for this cubemap surface D3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) i ,vPosition,m_vShadowMap.m_vCameraLight); m_vShadowMap.m_vCameraLight.SetPerspective(D3DX_PI / 2,1,5,40000 ); m_vShadowMap.m_vCameraLight.SetCamera(); m_vShadowMap.ProcessShadowMapWithPVS((KG3DRepresentObjectPVS*)pScene->GetPvs()); ////////////////////////////////////////////////////////////////////////// if(pCubeDepth) { LPDIRECT3DSURFACE9 pDest = NULL; hr = pCubeDepth->GetCubeMapSurface((D3DCUBEMAP_FACES)i,0,&pDest); KGLOG_COM_PROCESS_ERROR(hr); ExportToCubeSurface(pToolDepth,pDest,TRUE); SAFE_RELEASE(pDest); } if(pCubeColor) { LPDIRECT3DSURFACE9 pDest = NULL; hr = pCubeColor->GetCubeMapSurface((D3DCUBEMAP_FACES)i,0,&pDest); KGLOG_COM_PROCESS_ERROR(hr); ExportToCubeSurface(pToolColor,pDest,FALSE); SAFE_RELEASE(pDest); } } ////////////////////////////////////////////////////////////////////////// hr = S_OK; Exit0: return hr; }
void UpdateCube() { int i; Proj = MatrixPerspectiveFov(DegToRad(90.0f), 1, 0.5f , 200.0f); RenderToEnvMap->BeginCube( CubeMap ) &&VERIFY_RESULT; for(i=0;i<6;i++) { RenderToEnvMap->Face( (D3DCUBEMAP_FACES) i, 0 )&&VERIFY_RESULT; View = D3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) i ); ViewInv = Inverse(View); ViewProj = View*Proj; g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_COLORVALUE(clearcolor.x,clearcolor.y,clearcolor.z,1.0f), 1.0f, 0L ); // color macro maps floating point channels (0.f to 1.f range) to D3DCOLOR //RenderAreaTest(); // BrushRenderTest(); } RenderToEnvMap->End(0)&&VERIFY_RESULT; }