Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод текстуры с альфа каналом, DirectX 
:(
    Опции темы
Helicopterr
Дата 12.5.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: 1
Всего: 3



Пытаюсь вывести текстуру с альфа каналом (.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 );

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


--------------------
people can fly
PM MAIL   Вверх
empter
Дата 12.5.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фанат
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 20.5.2005

Репутация: 3
Всего: 4



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

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


 
PM MAIL MSN   Вверх
Helicopterr
Дата 12.5.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: 1
Всего: 3



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
 


--------------------
people can fly
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.