forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   DirectX смешивание (http://forum.boolean.name/showthread.php?t=9055)

Horror 02.09.2009 15:51

DirectX смешивание
 
всем привет!
вообще понемножку познаю эту штуку!

хочется сделать
режимы смешивания как в блитце
команды textureblend и entityblend

вот что сделал:
структура вершины
Код:

#define _MAX_LAYER    3
struct sVertex
{
        sVector3                position;        //точка
        HCOLOR                        color;                //цвет дифуз               
        sVector2                coord[_MAX_LAYER];
          //3 текстуры - значит 3 текстурыне координаты
        sVertex(void)
        {
            position.x = position.y = 0.f;
            z = 0.5f;
            color = 0xFFFFFFFF;
            for(int i=0;i<3;i++)
                coord[i].x = coord[i].y = 0.f;
    }
};

//дефайн гибкий вершинко от директ икх
#define D3DFVF_HGEVERTEX    (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX3)

- это чтобы дать предстваления о вершинке


чтобы менять режимы смешивания для ентити
применяю команду дивыйс->SetRenderState(...)
ими добился похожести на блитцевский ентити бленд


а вот для текстуры использую
дывайс->SetTextureState(...)
какие парметры тут ставиь для блитцевского
ТекстураБленд текс,4 ?
это типо Дот3 делать?
маялся вчера весь день не подобрал (
зато сделал для маски это ТекстураБленд текс,2



ПС Забыл сказать Дх8, если что

-=SCiP=- 03.09.2009 02:41

Ответ: DirectX смешивание
 
Horror ПС Забыл сказать Дх8, если что
Зачем тебе Дх8?
9я версия намного лучше.

========================
какие парметры тут ставиь для блитцевского
ТекстураБленд текс,4 ?
это типо Дот3 делать?


pd->SetTextureStageState(0, D3DTSS_MIPFILTER,D3DTEXF_POINT);

pd->SetTextureStageState(0, D3DTSS_MIPFILTER,D3DTEXF_LINEAR);

pd->SetTextureStageState(0, D3DTSS_MIPFILTER,D3DTEXF_NONE);

Horror 03.09.2009 14:06

Ответ: DirectX смешивание
 
оке пасиб,
думул и о 9том)
в принципе в 8м
те функции которые я использую есть и у 9го, только немного по именам отличается и перевести не трудно

эффекты я не собираюсь использовать в данный момент и 8мерка устрайвает

Knightmare 03.09.2009 14:16

Ответ: DirectX смешивание
 
Цитата:

Сообщение от -=SCiP=- (Сообщение 117404)
какие парметры тут ставиь для блитцевского
ТекстураБленд текс,4 ?
это типо Дот3 делать?


pd->SetTextureStageState(0, D3DTSS_MIPFILTER,D3DTEXF_POINT);

pd->SetTextureStageState(0, D3DTSS_MIPFILTER,D3DTEXF_LINEAR);

pd->SetTextureStageState(0, D3DTSS_MIPFILTER,D3DTEXF_NONE);

Что это за бред?! Уважаемый это смена метода фильтрации мип-уровней текстуры.
В 8 версии у текстур роде немного другой API был, но переделать будет не сложно:
PHP код:

switch(blendMode)
{
     case 
1:
        
pD3DDevice->SetTextureStageState(indexD3DTSS_COLOROPD3DTOP_BLENDTEXTUREALPHA);
        break;
    case 
2:
        
pD3DDevice->SetTextureStageState(indexD3DTSS_COLOROPD3DTOP_MODULATE);
        break;
    case 
3:
        
pD3DDevice->SetTextureStageState(indexD3DTSS_COLOROPD3DTOP_ADD);
        break;
    case 
4:
        
pD3DDevice->SetTextureStageState(indexD3DTSS_COLOROPD3DTOP_DOTPRODUCT3);
        break;
    case 
5:
        
pD3DDevice->SetTextureStageState(indexD3DTSS_COLOROPD3DTOP_MODULATE2X);
        break;


Для бленда мешей:
PHP код:

if(blendMode == 1)
{
    
pD3DDevice->SetRenderState(D3DRS_SRCBLENDD3DBLEND_SRCALPHA);
    
pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
}
else if(
blendMode == 2)
{
    
pD3DDevice->SetRenderState(D3DRS_SRCBLENDD3DBLEND_DESTCOLOR);
    
pD3DDevice->SetRenderState(D3DRS_DESTBLENDD3DBLEND_ZERO);
}
else if(
blendMode == 3)
{
    
pD3DDevice->SetRenderState(D3DRS_SRCBLENDD3DBLEND_SRCALPHA);
    
pD3DDevice->SetRenderState(D3DRS_DESTBLENDD3DBLEND_ONE);


Думаю с остальными стейтами сам разберешься.

Horror 04.09.2009 22:48

Ответ: DirectX смешивание
 
Спасиб еще раз эт снова я)
вообщем прогресс есть)
какие еще стейты надо вписать
т.к. сейчас он рендерит только ту текстуру которая сверху
Код:

g_pd3dDevice->SetTexture(0, g_pTexture1);
g_pd3dDevice->SetTexture(1, g_pTexture2);
g_pd3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0 );
g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, g_txblend1);
g_pd3dDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1 );
g_pd3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, g_txblend2);



Часовой пояс GMT +4, время: 02:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot