1
我跟隨了一些關於Sprite渲染和DirectX 11的教程,並瞭解它們,但所有的教程和示例似乎都以繪製1 sprite爲中心。我試圖擴大這一點,並批量友好。DirectX 11 Sprite Alpha混合在另一個Sprite之上
到目前爲止的結果是,如果我在另一個頂部繪製一個精靈,Alpha透明渲染將渲染背景顏色而不是下面的精靈。有誰知道如何正確設置它?
基本上,這是我的渲染循環:
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);
}
}
或者當你調用OMSetRenderTargets,設置depthstencilview爲NULL HTTP也可以不綁定深度緩存:// msdn.microsoft.com/en-us/library/windows/desktop/ff476464(v=vs.85).aspx – catflier