RenderMonkey에서 Dx9 용 폰 셰이더 효과를 쓰려고합니다.HLSL이 부정확 한 ps_2_0 입력 의미 POSITION0
있지만, 나는 픽셀 쉐이더
* "잘못된 ps_2_0을 입력 의미 'POSITION0'"*
에서 컴파일 오류를 받고 있어요 나는 그것을 해결하는 방법을 잘 모르겠어요 VS_OUTPUT에서 POSITION0 의미론과 관련이 있어야한다는 것을 알고 있습니다.
나는 TEXCOORD0에 의미 VS_OUTPUT의 순위를 변경했지만, 그 시스템은버텍스 쉐이더는 최소한
쉐이더 아래 제공되는 위치의 네 가지 구성 요소를 작성해야합니다보고합니다. 어떤 제안?
struct VS_INPUT
{
float4 Pos : POSITION0;
float3 Normal : NORMAL0;
};
struct VS_OUTPUT
{
float4 Pos : POSITION0;
float3 Normal : TEXCOORD0;
};
VS_OUTPUT vs_main(VS_INPUT Input)
{
VS_OUTPUT Output;
Output.Pos = Input.Pos;
Output.Normal = Input.Normal;
return Output;
}
내 픽셀 쉐이더 :
가 여기 내 버텍스 쉐이더의
float4x4 matViewProjection;
// light source
float4 lightPos;
float4 Ambient;
float4 Diffuse;
float4 Specular;
// material reflection properties
float4 Ke;
float4 Ka;
float4 Kd;
float4 Ks;
float nSpecular;
// eye
float4 eyePosition;
struct VS_OUTPUT
{
float4 Pos : POSITION0;
float3 Normal : TEXCOORD0;
};
float4 ps_main(VS_OUTPUT vsOutput) : COLOR0
{
vsOutput.Pos = mul(vsOutput.Pos, matViewProjection);
float3 ViewDirection = normalize(eyePosition.xyz - vsOutput.Pos.xyz);
float3 LightDirection = normalize(lightPos.xyz - vsOutput.Pos.xyz);
float3 N = normalize(vsOutput.Normal);
float3 R = reflect(-LightDirection, N);
float LdotN = max(0.0, dot(LightDirection, N));
float VdotR = max(0.0, dot(ViewDirection, R));
// find colour components
float4 a = Ka * Ambient;
float4 d = Kd * Diffuse * LdotN;
float4 s = Ks * Specular * pow(VdotR, nSpecular);
float4 FragColour = Ke + a + d + s;
return FragColour;
}
D3D9의 [Pixel Shader Semantics에 대한 공식 MS 설명서] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85)asp## PS)는 다음과 같습니다 POSITION이 픽셀 쉐이더에 유효하지 않다는 것을 나타내는 (와 10). – cod3monk3y