Sign in to follow this  
Pushapjit

alpha channel

Recommended Posts

Pushapjit    100
I am trying to render textures with alpha channel. Below is the code. I am getting problem with alpha channel which is showing blue color around the object having alpha channel. Grill.dds file is used for grill texture.
HRESULT CMyD3DApplication::DrawMeshData(SMeshData *pMeshData)
{
    
    // Set diffuse blending for alpha set in vertices
    m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
    m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA );
    m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );

    // Enable alpha testing (skips pixels with less than a certain alpha.)
    if( m_d3dCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL )
    {
        m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
        m_pd3dDevice->SetRenderState( D3DRS_ALPHAREF,        0x08 );
        m_pd3dDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );
    } 


    // Set and draw each of the materials in the mesh
    for( DWORD iMaterial=0; iMaterial < m_dwNumMaterials; iMaterial++ )
    {
        m_pd3dDevice->SetMaterial( &m_pMeshMaterials[iMaterial] );
        m_pd3dDevice->SetTexture( 0, m_pMeshTextures[iMaterial] );

        if( !m_bShowStrips && !m_bShowSingleStrip)
        {
            pMeshData->m_pMesh->DrawSubset( iMaterial );
        }
    }

      // Restore Alpha state
	m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,    FALSE );
      m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   FALSE );

    return S_OK;
}


HRESULT CMyD3DApplication::RestoreDeviceObjects()
{

    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );

}

Share this post


Link to post
Share on other sites
acid2    451
Quote:
Original post by Pushapjit
I am trying to render textures with alpha channel. Below is the code. I am getting problem with alpha channel which is showing blue color around the object having alpha channel. Grill.dds file is used for grill texture.

*** Source Snippet Removed ***


You're code looks overly complex. To just get alpha blending all you need to do is:


m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pd3dDevice->SetRenderState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );


That's it. No alpha test is needed :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this