Текстуры
Fido Themes (ru.directx)
От: Andrey Veselov <doc_@rbcmail.ru>
Тема: Текстуры
Дата: 12 марта 2001 г. 11:23
Hi all!
Вопрос. Есть следующий код:
В Texture_Set (nStage, nIndex) идет следующее :
pD3DDevice->SetTexture (nStage, Textures_pCache[nIndex]);
pD3DDevice->SetTextureStageState( nStage, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
pD3DDevice->SetTextureStageState( nStage, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
pD3DDevice->SetTextureStageState( nStage, D3DTSS_COLORARG1, D3DTA_TEXTURE
);
pD3DDevice->SetTextureStageState( nStage, D3DTSS_COLORARG2, D3DTA_DIFFUSE
);
И все нормально.
если после
Texture_Set (0,0);
добавить
Texture_Set (1,1);
то по логике результат должен быть равен текстуре с индексом 1.
Однако получается серый квадрат... В MFCTex все нормально
пробовал просто исполнить перед рисованием квадарата
следующее (взятое прямо из MFCTex)
pD3DDevice->SetTexture (0, Textures_pCache[0]);
pD3DDevice->SetTexture (1, Textures_pCache[1]);
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
pD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE
);
pD3DDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X );
pD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
тот же результат.
Где грабли ? Почему не получается положить две текстуры.
Пользую DX8. Карты GeForce2 GTS и TNT2.
--
С Уважением,
Андрей
3D Univerce [http://u3d.agava.ru]

От: Alexey Yakovenko <waker@mdart.com>
Тема: Re: Текстуры
Дата: 12 марта 2001 г. 14:04
"Andrey Veselov" <doc_@rbcmail.ru> wrote in message
news:98i0vh$2ico$1@ddt.demos.su...
> pD3DDevice->SetTexture (nStage, Textures_pCache[nIndex]);
// берем текстуру
> pD3DDevice->SetTextureStageState( nStage, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
> pD3DDevice->SetTextureStageState( nStage, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
> pD3DDevice->SetTextureStageState( nStage, D3DTSS_COLORARG1, D3DTA_TEXTURE
);
> pD3DDevice->SetTextureStageState( nStage, D3DTSS_COLORARG2, D3DTA_DIFFUSE
);
> =======
>
> И все нормально.
>
> если после
> Texture_Set (0,0);
> добавить
> Texture_Set (1,1); // первую текстуру для stage 1
> то по логике результат должен быть равен текстуре с индексом 1.
> Однако получается серый квадрат... В MFCTex все нормально
а что записано в alphaarg1?
и нафиг colorarg2=diffuse если его игноришь?
>
> пробовал просто исполнить перед рисованием квадарата
> следующее (взятое прямо из MFCTex)
> =======
> pD3DDevice->SetTexture (0, Textures_pCache[0]);
> pD3DDevice->SetTexture (1, Textures_pCache[1]);
> pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
);
> pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
);
> pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE
);
> pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1
);
>
> pD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE
);
> pD3DDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X
);
> pD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT
);
> pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE
);
> =======
>
> тот же результат.
> Где грабли ? Почему не получается положить две текстуры.
можешь кинуть список всех SetRS/SetTSS вызванных перед твоим Texture_Set?
что возвращает ValidateDevice?
что рисуется если вызвать Texture_Set(1, 0)?
какая там текстура? может у нее бордюр серый?
какой у stage1 addressing mode? clamp?
если после второго Texture_Set вызвать pd3dDev->SetTexture(1, NULL)
результат тот же?

От: Andrey Veselov <doc_@rbcmail.ru>
Тема: Re: Текстуры
Дата: 13 марта 2001 г. 5:24
"Alexey Yakovenko" <waker@mdart.com>
wrote in message news:98iadc$kaq$1@ddt.demos.su...
> а что записано в alphaarg1?
pD3DDevice->SetTextureStageState( nStage, D3DTSS_ALPHAARG1,
D3DTA_TEXTURE );
> можешь кинуть список всех SetRS/SetTSS вызванных
> перед твоим Texture_Set?
а больше ничего... это тест для разработываемой библиотечки.
Поэтому там необходимый минимум для отрисовки квадрата:
pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
pD3DDevice->SetRenderState( D3DRS_LIGHTING, false);
pD3DDevice->SetRenderState( D3DRS_ZENABLE, true );
а все SetTSS я приводил в функции. Других не вызывается. Кстати, а какие может
надо SetRS для такого текстурирования вызывать ?
> что возвращает ValidateDevice?
D3D_OK
> что рисуется если вызвать Texture_Set(1, 0)?
да проверял я так ;) текстура с индекосм 1.
Вообще в 0 тексуру гружу "кирпичную стенку", 1 - лайтмап.
Texture_Set(1, 0) - просто рисует голый лайтмап
> какая там текстура? может у нее бордюр серый?
уже ответил... лайтмап черно-белый
> если после второго Texture_Set вызвать
> pd3dDev->SetTexture(1, NULL) результат тот же?
Отображается только первая текстура (с индексом 0).
--
С Уважением,
Андрей
3D Univerce [http://u3d.agava.ru]
От: Alexey Yakovenko <waker@mdart.com>
Тема: Re: Текстуры
Дата: 13 марта 2001 г. 11:38
"Andrey Veselov" <doc_@rbcmail.ru> wrote in message
news:98k0as$v2g$1@ddt.demos.su...
> > что возвращает ValidateDevice?
> D3D_OK
а в параметре? он там должен вернуть сколько проходов может нарисовать. а вообще
- похоже что текстурные координаты для stage1 неправильные (иначе откуда бы
серый цвет взялся). попробуй:
settss( 0, D3DTSS_TEXCOORDINDEX, 0 );
settss( 1, D3DTSS_TEXCOORDINDEX, 0 );
еще попробуй переставить текстуры местами - сначала lightmap, сверху base.
цвет изменится?

От: Andrey Veselov <doc_@rbcmail.ru>
Тема: Re: Текстуры
Дата: 13 марта 2001 г. 13:39
> > > что возвращает ValidateDevice?
> > D3D_OK
> а в параметре? он там должен вернуть сколько проходов может нарисовать.
1 ;)
> а вообще - похоже что текстурные координаты для stage1 неправильные
(иначе
Верно.. см далее
> откуда бы серый цвет взялся). попробуй:
> settss( 0, D3DTSS_TEXCOORDINDEX, 0 );
> settss( 1, D3DTSS_TEXCOORDINDEX, 0 );
> еще попробуй переставить текстуры местами - сначала lightmap, сверху base.
> цвет изменится?
Все нашел.. прошу прощения что побеспокоил.... ;)))
Обдиная ошибка до смешного: координаты tu, tv лайтмапа инициализировались
криво. Отсюда и все глюки. Исправил и все заработало.
--
С Уважением,
Андрей
3D Univerce [http://u3d.agava.ru]
|