Advertisement
Guest User

blending

a guest
Feb 13th, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1. //-- Initialise Blending
  2.     D3D11_BLEND_DESC blendDesc;
  3.     ZeroMemory( &blendDesc, sizeof(blendDesc) );
  4.  
  5.     D3D11_RENDER_TARGET_BLEND_DESC rtbd;
  6.     ZeroMemory( &rtbd, sizeof(rtbd) );
  7.  
  8.     rtbd.BlendEnable             = true;
  9.     rtbd.SrcBlend                = D3D11_BLEND_ONE;
  10.     rtbd.DestBlend               = D3D11_BLEND_ONE;
  11.     rtbd.BlendOp                 = D3D11_BLEND_OP_MIN;
  12.     rtbd.SrcBlendAlpha           = D3D11_BLEND_ONE;
  13.     rtbd.DestBlendAlpha          = D3D11_BLEND_ONE;
  14.     rtbd.BlendOpAlpha            = D3D11_BLEND_OP_MIN;
  15.     rtbd.RenderTargetWriteMask   = D3D11_COLOR_WRITE_ENABLE_ALL;
  16.  
  17.     blendDesc.AlphaToCoverageEnable = false;
  18.     blendDesc.RenderTarget[0] = rtbd;
  19.  
  20.     md3dDevice->CreateBlendState(&blendDesc, &ShadowBlend);
  21.  
  22. //-- Draw Function
  23.  
  24. md3dImmediateContext->OMSetBlendState(0, 0, 0xffffffff);
  25.  
  26.     //-- Prepare to render to shadow map, set NULL render target (disabling colour writes)
  27.     for (int iLight = 0; iLight < mNumLights; iLight++)
  28.     {
  29.        
  30.  
  31.         mSmap[iLight]->BindDsvAndSetNullRenderTarget(md3dImmediateContext);
  32.  
  33.         DrawSceneToShadowMap(iLight);
  34.  
  35.         RestoreRenderTarget();
  36.  
  37.  
  38. #pragma region Draw_Scene
  39.     //-- Get the camera view and projection matrices
  40.     XMMATRIX view     = mCamera.View();
  41.     XMMATRIX proj     = mCamera.Proj();
  42.     XMMATRIX viewProj = mCamera.ViewProj();
  43.  
  44.     //-- add all lights together
  45.     for (int p = 0; p < 2; p++)
  46.     allLights[p] = mLight[p].GetLight();  
  47.  
  48.     //-- set lights
  49.     Effects::NormalMapFX->SetDirLights(allLights);
  50.     Effects::NormalMapFX->SetEyePosW(mCamera.GetPosition());
  51.  
  52.     Renderer->SetTechnique(Effects::NormalMapFX->Light2TexTech);
  53.     Renderer->SetTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
  54.     XMMATRIX shadowTransform;
  55.  
  56.     XMMATRIX world;
  57.     XMMATRIX worldInvTranspose;
  58.     XMMATRIX worldViewProj;
  59.  
  60.     Effects::NormalMapFX->SetShadowMap(mSmap[iLight]->DepthMapSRV());
  61.     shadowTransform = XMLoadFloat4x4(&mLight[iLight].mShadowTransform);
  62.  
  63.             //- Start drawing
  64.             D3DX11_TECHNIQUE_DESC techDesc;
  65.             Renderer->GetTechnique()->GetDesc( &techDesc );
  66.             for(UINT p = 0; p < techDesc.Passes; ++p)
  67.                 {
  68.    
  69.                     // Draw the grid.
  70.                     world = XMLoadFloat4x4(&mFloor->GetWorld());
  71.                     worldInvTranspose = MathHelper::InverseTranspose(world);
  72.                     worldViewProj = world*view*proj;
  73.  
  74.                     //-- Set effects for floor
  75.                     Effects::NormalMapFX->SetWorld(world);
  76.                     Effects::NormalMapFX->SetWorldInvTranspose(worldInvTranspose);
  77.                     Effects::NormalMapFX->SetWorldViewProj(worldViewProj);
  78.                     Effects::NormalMapFX->SetShadowTransforms(world*shadowTransform);
  79.                     Effects::NormalMapFX->SetTexTransform(XMMatrixScaling(8.0f, 10.0f, 1.0f));
  80.                     Effects::NormalMapFX->SetMaterial(mMaterials.GridMat());
  81.                     Effects::NormalMapFX->SetDiffuseMap(mBrickTexSRV);
  82.                     Effects::NormalMapFX->SetNormalMap(mBrickNormalTexSRV);
  83.  
  84.                     Renderer->GetTechnique()->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
  85.                     mFloor->Draw();
  86.  
  87.                     //** Draw Cubes
  88.                     //-- Iterate through all cube objects
  89.                     for ( mObjectIterator = mCubes.begin(); mObjectIterator != mCubes.end(); ++mObjectIterator )
  90.                     {
  91.                         cubeOffset = XMMatrixTranslation(mObjectIterator->GetOffset().x, mObjectIterator->GetOffset().y, mObjectIterator->GetOffset().z);
  92.                         cubeScale = XMMatrixScaling(mObjectIterator->GetScale().x, mObjectIterator->GetScale().y, mObjectIterator->GetScale().z);
  93.  
  94.                         XMStoreFloat4x4(&mObjectIterator->mWorld, XMMatrixMultiply(cubeScale, cubeOffset));
  95.  
  96.                         //-- Load the world matrix the cube
  97.                         world = XMLoadFloat4x4(&mObjectIterator->mWorld);
  98.                         worldInvTranspose = MathHelper::InverseTranspose(world);
  99.                         worldViewProj = world*view*proj;
  100.            
  101.                         //-- Set effects for cube
  102.                         Effects::NormalMapFX->SetWorld(world);
  103.                         Effects::NormalMapFX->SetWorldInvTranspose(worldInvTranspose);
  104.                         Effects::NormalMapFX->SetWorldViewProj(worldViewProj);
  105.                         Effects::NormalMapFX->SetShadowTransforms(world*shadowTransform);
  106.                         Effects::NormalMapFX->SetTexTransform(XMMatrixScaling(2.0f, 1.0f, 1.0f));
  107.                         Effects::NormalMapFX->SetMaterial(mMaterials.BoxMat());
  108.            
  109.            
  110.                         Renderer->GetTechnique()->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
  111.                         mObjectIterator->Draw();
  112.                     }
  113.        
  114.                 }
  115.  
  116.     DrawFrameStats();
  117. #pragma endregion Draw_Scene   
  118.  
  119. ///*** end drawing
  120.  
  121.         float blendFactor[] = {0.5f, 0.5f, 0.5f, 1.0f};
  122.  
  123.         //Set the blend state for transparent objects
  124.         md3dImmediateContext->OMSetBlendState(ShadowBlend, blendFactor, 0xffffffff);
  125.  
  126. } // end loop through lights
  127.  
  128.  
  129.     HR(mSwapChain->Present(0, 0));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement