J'ai suivi quelques tutoriels sur Sprite Rendering avec DirectX 11, et je les comprends, mais tous les tutoriels et les échantillons semblent centrés sur le dessin 1 sprite. J'essaie de prolonger cela, et être favorable au lot. Le résultat jusqu'à présent, est que si je dessine un sprite sur l'autre, la transparence Alpha rend la couleur d'arrière-plan au lieu de l'image-objet ci-dessous. Est-ce que quelqu'un sait comment mettre en place correctement?DirectX 11 Sprite Alpha se fondant sur un autre sprite
Fondamentalement, ceci est ma boucle de rendu:
void SpriteManager::render(){
ID3D11DeviceContext* deviceContext;
m_d3dDevice->GetImmediateContext(&deviceContext);
unsigned int stride = sizeof(Vertex);
unsigned int offset = 0;
float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
deviceContext->OMSetBlendState(m_alphaBlendState, blendFactor, 0xFFFFFFFF);
deviceContext->IASetInputLayout(m_inputLayout);
deviceContext->IASetVertexBuffers(0, 1, &m_vertexBuffer, &stride, &offset);
deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
deviceContext->VSSetShader(m_vShader, 0, 0);
deviceContext->PSSetShader(m_pShader, 0, 0);
deviceContext->PSSetSamplers(1, 1, &m_sampler); //Using S1 Register
for(unsigned int i = 0; i != m_sprites.size(); ++i)
{
deviceContext->PSSetShaderResources(1, 1, &(m_sprites[i]->m_textureRV));
XMMATRIX& world = m_sprites[i]->getWorldMatrix();
XMMATRIX& mvp = XMMatrixMultiply(world, vpMatrix_);
mvp = XMMatrixTranspose(mvp);
deviceContext->UpdateSubresource(mvpCB_, 0, 0, &mvp, 0, 0); //Update ViewProjection Matrix in Shader
deviceContext->Draw(6, 0);
}
}
Sinon, vous pouvez aussi ne pas lier le tampon de profondeur lorsque vous appelez OMSetRenderTargets, définissez le depthstencilview NULL http: // msdn.microsoft.com/en-us/library/windows/desktop/ff476464(v=vs.85).aspx – catflier