Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //-- Initialise Blending
- D3D11_BLEND_DESC blendDesc;
- ZeroMemory( &blendDesc, sizeof(blendDesc) );
- D3D11_RENDER_TARGET_BLEND_DESC rtbd;
- ZeroMemory( &rtbd, sizeof(rtbd) );
- rtbd.BlendEnable = true;
- rtbd.SrcBlend = D3D11_BLEND_ONE;
- rtbd.DestBlend = D3D11_BLEND_ONE;
- rtbd.BlendOp = D3D11_BLEND_OP_MIN;
- rtbd.SrcBlendAlpha = D3D11_BLEND_ONE;
- rtbd.DestBlendAlpha = D3D11_BLEND_ONE;
- rtbd.BlendOpAlpha = D3D11_BLEND_OP_MIN;
- rtbd.RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
- blendDesc.AlphaToCoverageEnable = false;
- blendDesc.RenderTarget[0] = rtbd;
- md3dDevice->CreateBlendState(&blendDesc, &ShadowBlend);
- //-- Draw Function
- md3dImmediateContext->OMSetBlendState(0, 0, 0xffffffff);
- //-- Prepare to render to shadow map, set NULL render target (disabling colour writes)
- for (int iLight = 0; iLight < mNumLights; iLight++)
- {
- mSmap[iLight]->BindDsvAndSetNullRenderTarget(md3dImmediateContext);
- DrawSceneToShadowMap(iLight);
- RestoreRenderTarget();
- #pragma region Draw_Scene
- //-- Get the camera view and projection matrices
- XMMATRIX view = mCamera.View();
- XMMATRIX proj = mCamera.Proj();
- XMMATRIX viewProj = mCamera.ViewProj();
- //-- add all lights together
- for (int p = 0; p < 2; p++)
- allLights[p] = mLight[p].GetLight();
- //-- set lights
- Effects::NormalMapFX->SetDirLights(allLights);
- Effects::NormalMapFX->SetEyePosW(mCamera.GetPosition());
- Renderer->SetTechnique(Effects::NormalMapFX->Light2TexTech);
- Renderer->SetTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
- XMMATRIX shadowTransform;
- XMMATRIX world;
- XMMATRIX worldInvTranspose;
- XMMATRIX worldViewProj;
- Effects::NormalMapFX->SetShadowMap(mSmap[iLight]->DepthMapSRV());
- shadowTransform = XMLoadFloat4x4(&mLight[iLight].mShadowTransform);
- //- Start drawing
- D3DX11_TECHNIQUE_DESC techDesc;
- Renderer->GetTechnique()->GetDesc( &techDesc );
- for(UINT p = 0; p < techDesc.Passes; ++p)
- {
- // Draw the grid.
- world = XMLoadFloat4x4(&mFloor->GetWorld());
- worldInvTranspose = MathHelper::InverseTranspose(world);
- worldViewProj = world*view*proj;
- //-- Set effects for floor
- Effects::NormalMapFX->SetWorld(world);
- Effects::NormalMapFX->SetWorldInvTranspose(worldInvTranspose);
- Effects::NormalMapFX->SetWorldViewProj(worldViewProj);
- Effects::NormalMapFX->SetShadowTransforms(world*shadowTransform);
- Effects::NormalMapFX->SetTexTransform(XMMatrixScaling(8.0f, 10.0f, 1.0f));
- Effects::NormalMapFX->SetMaterial(mMaterials.GridMat());
- Effects::NormalMapFX->SetDiffuseMap(mBrickTexSRV);
- Effects::NormalMapFX->SetNormalMap(mBrickNormalTexSRV);
- Renderer->GetTechnique()->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
- mFloor->Draw();
- //** Draw Cubes
- //-- Iterate through all cube objects
- for ( mObjectIterator = mCubes.begin(); mObjectIterator != mCubes.end(); ++mObjectIterator )
- {
- cubeOffset = XMMatrixTranslation(mObjectIterator->GetOffset().x, mObjectIterator->GetOffset().y, mObjectIterator->GetOffset().z);
- cubeScale = XMMatrixScaling(mObjectIterator->GetScale().x, mObjectIterator->GetScale().y, mObjectIterator->GetScale().z);
- XMStoreFloat4x4(&mObjectIterator->mWorld, XMMatrixMultiply(cubeScale, cubeOffset));
- //-- Load the world matrix the cube
- world = XMLoadFloat4x4(&mObjectIterator->mWorld);
- worldInvTranspose = MathHelper::InverseTranspose(world);
- worldViewProj = world*view*proj;
- //-- Set effects for cube
- Effects::NormalMapFX->SetWorld(world);
- Effects::NormalMapFX->SetWorldInvTranspose(worldInvTranspose);
- Effects::NormalMapFX->SetWorldViewProj(worldViewProj);
- Effects::NormalMapFX->SetShadowTransforms(world*shadowTransform);
- Effects::NormalMapFX->SetTexTransform(XMMatrixScaling(2.0f, 1.0f, 1.0f));
- Effects::NormalMapFX->SetMaterial(mMaterials.BoxMat());
- Renderer->GetTechnique()->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
- mObjectIterator->Draw();
- }
- }
- DrawFrameStats();
- #pragma endregion Draw_Scene
- ///*** end drawing
- float blendFactor[] = {0.5f, 0.5f, 0.5f, 1.0f};
- //Set the blend state for transparent objects
- md3dImmediateContext->OMSetBlendState(ShadowBlend, blendFactor, 0xffffffff);
- } // end loop through lights
- HR(mSwapChain->Present(0, 0));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement