Показать сообщение отдельно
Старый 12.08.2014, 15:55   #151
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,033
Написано 2,318 полезных сообщений
(для 5,357 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Сообщение от Mr_F_ Посмотреть сообщение
да, потому что ты объявляешь пустую неопределённую переменную и сравниваешь ещё с чем-то.
VFACE над вставить в входящие данные PS.
там где у тебя всякие TexCoords : TEXCOORD0, туда же вставляешь что-нибудь типа whatFace : VFACE.
Уже делал, дебагер ругается на "lit", не объявленная переменная:



float4x4 matrixWorldViewProj : MATRIX_WORLDVIEWPROJ; 
float4x4 matrixWorld	     : MATRIX_WORLD;	   

float3	 lightDirection	     : LIGHT0_DIRECTION;     
float4	 lightColor	     	 : LIGHT0_COLOR;	 

float4	 entityColor	     : COLOR_DIFFUSE;	
float 	 whatFace 	     : VFACE;

texture  diffuseTexture      : TEXTURE_0;	     


sampler	diffuseSampler = sampler_state

{
	Texture = <diffuseTexture>;

	AddressU	= WRAP;
	AddressV	= WRAP;
	AddressW	= WRAP;

	MinFilter	= ANISOTROPIC;
	MagFilter	= ANISOTROPIC;
	MipFilter	= ANISOTROPIC;


	MaxAnisotropy	= 16;
};



struct	VSInput {
	float4 position  : POSITION0;
	float3 normal 	 : NORMAL;
	float2 texCoords : TEXCOORD0;
};



struct VSOutput {
	float4 position  : POSITION0;
	float3 normal 	 : TEXCOORD1;
	float2 texCoords : TEXCOORD0;
};



VSOutput VSMain(VSInput input) {


	VSOutput output;



	output.position  = mul (input.position, matrixWorldViewProj);



	output.normal 	 = normalize(mul(input.normal, matrixWorld));

	output.texCoords = input.texCoords;



	return output;
}


float4 PSMain( VSOutput input) : COLOR {

	float4 diffuse  = tex2D(diffuseSampler, input.texCoords);

	
	float4 color;
    color = tex2D( diffuseSampler, input.texCoords.xy);
	
	if (diffuse.a < 0.5f) discard;


	if (whatFace < -1 )
	{

			float lit 	= dot(-input.normal , -lightDirection);
	}
	else
	{
			float lit 	= dot(input.normal , -lightDirection);
	}

	return diffuse * entityColor * lit * lightColor;
}

technique Diffuse {
	pass p0 {
		PixelShader  = compile ps_3_0 PSMain();
		VertexShader = compile vs_3_0 VSMain();
		
		CullMode = none;
	}
}


______________________________

Запихал ретурн после каждого условия и понял что мой код не работает вообще. То есть освещение не флипается там где надо, у меня флипается всё.

______________________________

Кажется понял что я не так сделал. Но как сделать правильно не понял.
(Offline)
 
Ответить с цитированием