Показать сообщение отдельно
Старый 01.05.2014, 21:19   #114
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

А вотя мой шейдер воды

//КОД ШЕЙДЕРА
static float4 Colorka : COLOR0;
const float UPSTimer;
texture diffuseTexture : TEXTURE_0;
texture diffuseTexture1 : TEXTURE_1;
float3 PosCamera;

sampler diffuseSampler = sampler_state
{
	Texture = <diffuseTexture>;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	MaxAnisotropy = 4;
};

sampler diffuseSampler1 = sampler_state
{
	Texture = <diffuseTexture1>;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	MaxAnisotropy = 4;
};

struct PSInput 
{
	float2 texCoords : TEXCOORD0; 
};

struct PSOutput 
{
	float4 color : COLOR; 
};

PSOutput PSMain (PSInput input)
{
	PSOutput output;
	Colorka =(tex2D(diffuseSampler, input.texCoords+float2(0,UPSTimer))+tex2D(diffuseSampler1, input.texCoords-float2(UPSTimer,UPSTimer))+tex2D(diffuseSampler1, input.texCoords-float2(UPSTimer,-UPSTimer)));
	Colorka.a = Colorka.r;
	if (Colorka.a > 0.75f)
		{
			Colorka.r=(1-Colorka.r)/4+Colorka.r;
			Colorka.g=(1-Colorka.g)/4+Colorka.g;
			Colorka.b=(1-Colorka.b)/4+Colorka.b;
		}
	if (Colorka.a > 0.90f)
		{
			Colorka.r=1;
			Colorka.g=1;
			Colorka.b=1;
		}
	Colorka.a = Colorka.a;
	Colorka.b = Colorka.b*2;
	Colorka.g = Colorka.b;
	Colorka.rgb=Colorka.rgb/4;
	output.color.rgba = Colorka;
	return output;
}

technique MainTechnique
{
	pass p
	{
		AlphaBlendEnable= true;
		PixelShader	= compile ps_2_0 PSMain();
	}
}
На стороне кода игры
Define tModel=xLoadMesh("Resurse\Models\Water\Model.b3d");Плоскость
Define tShader = xLoadFXFile("Resurse\Shaders\Water2.fx")
Define tTextureDiffuse.i=xLoadTexture("Resurse\Shaders\W1.png")
Define tTextureDiffuse1.i=xLoadTexture("Resurse\Shaders\W2.png")
xSetEntityEffect(tModel,tShader)
xSetEffectTechnique(tModel,"MainTechnique")
xSetEffectTexture(tModel,	"diffuseTexture",tTextureDiffuse)
xSetEffectTexture(tModel,	"diffuseTexture1",tTextureDiffuse1)
Define UPSTimer.f=0

;В цикле пишем
UPSTimer=UPSTimer+0.00025
xSetEffectFloat(tModel,		"UPSTimer",UPSTimer)
Нам также понадобится две текстуры W1 W2. В примерах Xors3D есть два png изображения Fire_NormalF.png и Fire_NormalS.png. Меняем их в редакторе, придавая оттенки серого.

(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Izunad за это полезное сообщение:
FREE MAN (03.05.2014), H@NON (02.05.2014), LLI.T.A.L.K.E.R. (02.05.2014), moka (02.05.2014), pepel (05.09.2014), Randomize (02.05.2014)