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

Сообщение от Mr_F_ Посмотреть сообщение
ну потому что теперь ты её должен читать как input.whatFace. так же как и всё, что ты читаешь из VSOutput.
То есть так?

float4x4 matrixWorldViewProj : MATRIX_WORLDVIEWPROJ; 
float4x4 matrixWorld	     : MATRIX_WORLD;	   

float3	 lightDirection	     : LIGHT0_DIRECTION;     
float4	 lightColor	     	 : LIGHT0_COLOR;	 

float4	 entityColor	     : COLOR_DIFFUSE;	

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;
        float  whatFace : VFACE;
};



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



VSOutput VSMain(VSInput input) {


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


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

	output.texCoords = input.texCoords;
	
	output.whatFace	 = input.whatFace;



	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;

	float lit;

	if ( input.whatFace == -1 )
	{

			lit 	= dot(-input.normal , -lightDirection);
	}
	else
	{
			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;
	}
}


Дебагер говорит инвалид:
(35): error X4502: invalid input semantic 'VFACE'
(99): ID3DXEffectCompiler::CompileEffect: There was an error compiling expression
ID3DXEffectCompiler: Compilation failed
(Offline)
 
Ответить с цитированием