|
昨天逐语句调试,发现我程序里D3DXCreateEffectFromFile()函数创建effect失败,原语句是这样的:
if(FAILED(D3DXCreateEffectFromFile(m_pD3DDevice,L"LIKETwins_debug04.fx",0,0,0,0,&m_pE,&pError)))
return E_FAIL;
为了保险,FX文件我已经分别放到了解决方案debug文件夹下、项目文件夹下和项目debug文件夹下,但是还是不能成功,高手们帮我看看到底是什么原因啊?下面是我的fx文件的shader代码:
///////////////////////////////////////////////////
// Vars
///////////////////////////////////////////////////
float4x4 matWorldViewProj : WVP;
float4x4 matNorm : W;
float3 lightDir : LDIRECTION;
float4 lightAmb : LAMBIENT;
float4 lightDiff : LDIFFUSE;
float4 lightSpec : LSPECULAR;
float intenAmb : IAMBIENT;
float intenDiff : IDIFFUSE;
float intenSpec : ISPECULAR;
float intenEmi : IEMISSIVE;
float4 materAmb : KAMBIENT;
float4 materDiff : KDIFFUSE;
float4 materSpec : KSPECULAR;
float4 materEmi : KEMISSIVE;
float exSpec : ESPECULAR;
float3 eye : EYE;
///////////////////////////////////////////////////
// Vertex Shader
///////////////////////////////////////////////////
struct VS_INPUT
{
float3 position : POSITION;
float3 normal : NORMAL;
float2 texcoo : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 position : POSITION;
float2 texcoo : TEXCOORD0;
float3 N : TEXCOORD1;
float3 L : TEXCOORD2;
float3 V : TEXCOORD3;//换H时注释掉
//float3 H : TEXCOORD3;
};
VS_OUTPUT vs_main(VS_INPUT Input)
{
VS_OUTPUT Output;
Output.position=mul(float4(Input.position.xyz,1.0f),matWorldViewProj);
Output.texcoo=Input.texcoo;
Output.N=normalize(mul(Input.normal,(float3x3)matNorm));
Output.L=normalize(mul(-lightDir,(float3x3)matNorm));
float3 posNorm=mul(float4(Input.position.xyz,1.0f),matNorm);
Output.V=normalize(eye-posNorm);//换H时把“Output.”改为“float3 ”
//Output.H=normalize(L+V);
return Output;
}
///////////////////////////////////////////////////
// Pixel Shader
///////////////////////////////////////////////////
texture tex : TEX;
sampler samp=sampler_state
{
Texture= <tex>;
AddressU=WRAP;
AddressV=WRAP;
MipFilter=LINEAR;
MinFilter=LINEAR;
MagFilter=LINEAR;
}
struct PS_INPUT
{
float2 texcoo : TEXCOORD0;
float3 N : TEXCOORD1;
float3 L : TEXCOORD2;
float3 V : TEXCOORD3;//换H时注释掉
//float3 H : TEXCOORD3;
};
float4 ps_main(PS_INPUT Input) : COLOR
{
float3 R=2*dot(Input.N,Input.L)*Input.N-Input.L;//换H时注释掉
float4 ambColor=intenAmb*materAmb*lightAmb
float4 diffColor=intenDiff*materDiff*lightDiff*max(0,dot(Input.N,Input.L))
int isNotPass=dot(Input.N,Input.L)>0?1:0;
int isNotOver=dot(Input.N,Input.V)>0?1:0;
float4 specColor=intenSpec*materSpec*lightSpec*pow(max(0,dot(R,Input.V)),exSpec)*isNotPass*isNotOver;//换H时注释掉
//float4 specColor=intenSpec*materSpec*lightSpec*pow(max(0,dot(Input.N,Input.H)),exSpec)*isNotPass*isNotOver;
float4 emiColor=intenEmi*materEmi;
float4 ambdiffTex=tex2D(samp,Input.texcoo);
return (ambColor+diffColor)*ambdiffTex+specColor+emiColor;
}
///////////////////////////////////////////////////
// Techniques
///////////////////////////////////////////////////
technique tec0
{
pass p0
{
VertexShader=compile vs_3_0 vs_main();
PixelShader=compile ps_3_0 ps_main();
}
} |
|