Skip to main content
gamedev.net
🔒 Locked

alpha channel

Started by Pushapjit Apr 17, 2006 at 4:43 AM 0 replies 950+ views
Original Post
Pushapjit
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.

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 );

}

acid2
acid2
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 :)

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.