Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Вывод текстуры с альфа каналом


Автор: Helicopterr 12.5.2006, 01:14
Пытаюсь вывести текстуру с альфа каналом (.dds) на задний фон но вместо прозрачных участков черный цвет smile
Делаю примерно так:
Код
    
    pd3dDevice->SetTexture(0, BackgroundTexture);
    //здесь LPDIRECT3DTEXTURE9 BackgroundTexture;
    //здесь IDirect3DDevice9* pd3dDevice;    
    pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
    pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
    pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
    pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
   
    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE );    
    pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );

    pd3dDevice->SetFVF( FLATBACKGROUNDVERTEX::FVF);//структура с координатами
    pd3dDevice->SetStreamSource( 0, m_pVBBackground, 0, 6*sizeof(float) );
    //здесь LPDIRECT3DVERTEXBUFFER9 m_pVBBackground;
    pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

Кто знает в чем засада? Буду очень благодарен ;) 

Автор: empter 12.5.2006, 21:14
Дык сначала сэмплер настраивай, а потом уже текстуру ставь
Должно работать
    
Код

    pd3dDevice->SetFVF( FLATBACKGROUNDVERTEX::FVF);//структура с координатами
    pd3dDevice->SetStreamSource( 0, m_pVBBackground, 0, 6*sizeof(float) );

    pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
    pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
    pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
    pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
   
    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE );    
    pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );

    pd3dDevice->SetTexture(0, BackgroundTexture);

    pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );


 

Автор: Helicopterr 12.5.2006, 21:41
empter cпасибо, попробую. Я утром впринципи разобрался. Я юзал D3DXCreateTextureFromFile а надо было D3DXCreateTextureFromFileEx: (привожу основное)
Код
  
     D3DXCreateTextureFromFileEx( pd3dDevice, "picture\\kills.dds",  D3DX_DEFAULT, D3DX_DEFAULT, 
        0, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,
        D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,
        D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,
        0xFF000000, NULL, NULL, &m_pBackgroundTexture);
//...
    
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE4X); 
pd3dDevice->SetFVF( FLATBACKGROUNDVERTEX::FVF);
pd3dDevice->SetTexture(0, m_pBackgroundTexture);
pd3dDevice->SetStreamSource( 0, m_pVBBackground, 0, 6*sizeof(float) );
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); 
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );

Там есть парметр цветового ключа который я проставил 0xFF000000 - не рисовать альфа.
Приколен параметр D3DTOP_MODULATE4X есть ещё D3DTOP_MODULATE2X кто не пробовал - советую smile
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)