DirectX 11 を使用したスプライト レンダリングに関するいくつかのチュートリアルに従い、それらを理解しましたが、すべてのチュートリアルとサンプルは 1 つのスプライトの描画を中心にしているようです。私はそれを拡張し、バッチフレンドリーにしようとしています。
これまでのところ、あるスプライトを別のスプライトの上に描画すると、アルファ透明度が下のスプライトではなく背景色をレンダリングします。これを適切に設定する方法を知っている人はいますか?
基本的に、これは私のレンダリングループです:
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 );
}
}