Страница 1 от 1

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

Публикувано: 08 юни 2004 12:38
от haho
Имам 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 кодът работи както очаквам

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

Публикувано: 26 окт 2006 19:34
от YE
http://tomsdxfaq.blogspot.com/2002_08_0 ... l#80620056

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