мултитекстуриране (dx90 и gf4mx)

Всичко свързано с Microsoft DirectX. Въпроси относно HLSL.
Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран на: 07 дек 2003 21:52
Местоположение: България
Контакти:

мултитекстуриране (dx90 и gf4mx)

Мнение от haho » 08 юни 2004 12:38

Имам 2 текстури. Едната DX5 формат, в rgb каналите държа цвета на обеката. В алфата държа бляскавоста. Втората текстура е A4R4G4B4, във всичките и канали държа стоиност за прозрачноста на обекта. От въртек шейдъра "спускам" в oD0 - Normal*LightDir*LightDiff + Ambient и в oD1 - LightSpec*(N*H)^16. В D3DDEVCAPS9 имам MaxTextureBlendStages = 8 и MaxSimultaneousTextures = 2 ( за gf4 mx). Това значе ли ,че мога в първите два стейджа да ползвам като аргумент на блендинг операциите текстурите, а в третият да палзвам др. аргументи (нали MaxTextureBlendStages = 8 ) ? Ако мога защо така конфигурираната каскада не работи:

Код: Избери всички

dev->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
	dev->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);
	dev->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR);

	dev->SetSamplerState(1,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
	dev->SetSamplerState(1,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);


dev->SetTexture(0,dx5);
dev->SetTexture(1,a4r4g4b4);

dev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
		dev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
		dev->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
		dev->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
		_dev->SetTextureStageState(0,D3DTSS_RESULTARG,D3DTA_TEMP);

		dev->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_MODULATE);
		dev->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_TEMP);
		dev->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
		dev->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
		dev->SetTextureStageState(1,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
		dev->SetTextureStageState(1,D3DTSS_RESULTARG, D3DTA_CURRENT);

		dev->SetTextureStageState(2,D3DTSS_COLOROP,D3DTOP_MULTIPLYADD);
		dev->SetTextureStageState(2,D3DTSS_COLORARG1,D3DTA_TEMP|D3DTA_ALPHAREPLICATE);
		dev->SetTextureStageState(2,D3DTSS_COLORARG2,D3DTA_SPECULAR);
		dev->SetTextureStageState(2,D3DTSS_COLORARG0,D3DTA_CURRENT);
		dev->SetTextureStageState(2,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
		dev->SetTextureStageState(2,D3DTSS_ALPHAARG1,D3DTA_CURRENT);
		dev->SetTextureStageState(2,D3DTSS_RESULTARG,D3DTA_CURRENT);


Изпробван на r9800, r9700, r8500, r9200, fx5200 кодът работи както очаквам

codemaster
New User
New User
Мнения: 19
Регистриран на: 26 окт 2006 16:26
Местоположение: Oregon, USA

Мнение от codemaster » 26 окт 2006 18:51

Че gf4mmx май подържаха само фиксиран шейдинг (T&L) ....какво е това асембли дет му го пускаш? Тази карта е прекалено древна за съвременния шейдинг. Обаче на gf4Тi може и да палне.

Потребителски аватар
YE
Power User
Power User
Мнения: 1554
Регистриран на: 01 дек 2003 21:08
Местоположение: Outer Qwghlm
Контакти:

Мнение от YE » 26 окт 2006 19:34

http://tomsdxfaq.blogspot.com/2002_08_0 ... l#80620056

Имаш право на два стейджа, и евентуално, при редки обстоятелства, на трети.

Отговори

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост