i have a problem with one of the exersises in "introduction to gameprogramming with directx 11" (for the ones who have the book, its chapter 10, exercise 7).
the task ist to draw an animation with additive blending. after trying some logic thinks i started "brute forcing" all possible variations but what ever i tried i never got the desired result.
i attached an img so u can see what is requested and what is my "best" result yet.
i hope that someone can give me a hint.. really tryed to solve it by my own for hours
(thats the blend desc which gives me the best result like on the screenshot (right))
D3D11_BLEND_DESC noBlack = {0};
noBlack.AlphaToCoverageEnable = false;
noBlack.IndependentBlendEnable = false;
noBlack.RenderTarget[0].BlendEnable = true;
noBlack.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
noBlack.RenderTarget[0].DestBlend = D3D11_BLEND_SRC_ALPHA;
noBlack.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
noBlack.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
noBlack.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE;
noBlack.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
noBlack.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
HR(device->CreateBlendState(&noBlack, &NoBlack));
boxTech->GetDesc( &techDesc );
for(UINT p = 0; p < techDesc.Passes; ++p)
{
md3dImmediateContext->IASetVertexBuffers(0, 1, &mBoxVB, &stride, &offset);
md3dImmediateContext->IASetIndexBuffer(mBoxIB, DXGI_FORMAT_R32_UINT, 0);
// Draw the Cylinder
XMMATRIX world = XMLoadFloat4x4(&mCylWorld);
XMMATRIX worldInvTranspose = MathHelper::InverseTranspose(world);
XMMATRIX worldViewProj = world*view*proj;
Effects::BasicFX->SetWorld(world);
Effects::BasicFX->SetWorldInvTranspose(worldInvTranspose);
Effects::BasicFX->SetWorldViewProj(worldViewProj);
Effects::BasicFX->SetTexTransform(XMMatrixIdentity());
Effects::BasicFX->SetMaterial(mBoltMat);
Effects::BasicFX->SetDiffuseMap(bolts[currentBolt]);
md3dImmediateContext->RSSetState(RenderStates::NoCullRS);
md3dImmediateContext->OMSetBlendState(RenderStates::NoBlack, blendFactor, 0xffffffff);
landAndWavesTech->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
md3dImmediateContext->DrawIndexed(mCylIndexCount, mCylIndexOffset, mCylVertexOffset);
// Set per object constants.
world = XMLoadFloat4x4(&mBoxWorld);
worldInvTranspose = MathHelper::InverseTranspose(world);
worldViewProj = world*view*proj;
Effects::BasicFX->SetWorld(world);
Effects::BasicFX->SetWorldInvTranspose(worldInvTranspose);
Effects::BasicFX->SetWorldViewProj(worldViewProj);
Effects::BasicFX->SetTexTransform(XMMatrixIdentity());
Effects::BasicFX->SetMaterial(mBoxMat);
Effects::BasicFX->SetDiffuseMap(mBoxMapSRV);
md3dImmediateContext->OMSetBlendState(0, blendFactor, 0xffffffff);
boxTech->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
md3dImmediateContext->DrawIndexed(36, 0, 0);
}
i really hope that someone can help me because i get crazy
regards helgon