我正在嘗試爲RenderMonkey中的Dx9編寫phong着色器效果。HLSL無效ps_2_0輸入語義POSITION0
我在像素着色器
*「無效ps_2_0輸入語義‘POSITION0’」 *
得到一個編譯錯誤,我不知道如何解決它,雖然我知道這與VS_OUTPUT中的POSITION0語義有關。
我試圖改變VS_OUTPUT的POS語義來TEXCOORD0,但隨後的系統報告
頂點着色器必須至少寫入位置
着色器下面提供的所有四個組成部分。有什麼建議麼?
這裏是我的頂點着色器:
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語義的官方MS文檔](http://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v = vs.85).aspx#PS) (和10)顯示POSITION對像素着色器無效。 – cod3monk3y