游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2696|回复: 2

D3DXCreateEffectFromFile()失败

[复制链接]

16

主题

35

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2009-8-20 11:14:00 | 显示全部楼层 |阅读模式
昨天逐语句调试,发现我程序里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();
  }
}

16

主题

35

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2009-8-20 12:50:00 | 显示全部楼层

Re:D3DXCreateEffectFromFile()失败

前面几个少分号的错改了,就后边这段:
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时注释掉
报了个错:error X4579: NaN and infinity literals not allowed by shader model
ID3DXEffectCompiler: Compilation failed
这是怎么回事呢,去掉这部分镜面反射,程序正常了....

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-20 13:38:00 | 显示全部楼层

Re:D3DXCreateEffectFromFile()失败

编译函数应该有错误输出
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-7 16:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表