HLSL中一些需要注意的问题

以后慢慢添加

 

1.       在顶点渲染器中输入参数里的位置信息是不可缺少的,同样在像素渲染器的输入参数中颜色信息是不可缺少的。

2.       顶点渲染器的输入参数一定要包含所有的顶点信息,否则程序可能不能正常运行,或者出现意想不到的错误,比如,当前的网格覆盖有纹理,也就是说顶点信息中一定含有纹理坐标的信息,那么应该将纹理坐标作为输入信息添加到顶点渲染的输入参数中,尽管对于纹理的相关操作是属于像素渲染器的任务。

 

 

以下的内容为引用:引自http://www.cnblogs.com/gogoplayer/archive/2009/07/21/980984.html

 

1.         Effect文件(.fx)是标准格式,要妥善利用其接口与应用程序通讯,理解语意(Semantic)和注释(Annoation)是关键。

2.         HLSL指令集要倒背如流,切不可做出重写标准库的蠢事,当初我就写了一个distance函数来求距离,熟不知标准库里早有这个函数,仔细一研究,标准库里不仅支持三维向量,其它的诸如二维也以考虑在内,汗^_^,完整的指令集可以参见DX帮助文件,路径为DirectX Graphics->HLSL->Reference->Intrinsic Functions。

3.         不仅指令既要倒背如流,还要注意指令的限制,尤其是Shader Model(SM),像ddx,ddy这样的指令是不能用在Shader Model 1 中的,这个我感觉是比较令人沮丧的事情,程序员的代码和逻辑都正确,却限制于硬件配置的问题,还好现在硬件发展迅速,SM3.0甚至SM4.0的显卡都已经进入主流市场,这些限制会逐渐消失的。具体的限制可以查看DirectX Graphics->HLSL->Reference-> Shader Models。

4.         编译Effect的时候能用低配置的Profile就用低的,举例来说能用vs_1_1的就不要用vs_2_0,ps也是一样的道理,Profile选的越低,你的Effect兼容性就越好,如果不分清楚直接就用最高Profile,到了客户那因为显卡配置不够报错的概率就大了,至少我现在还没听说某款PC游戏只能在SM4.0下才能用,游戏机,测试程序自然不算了,以后没准等SM5.0都普及的时候,我这话也自然过时了^_^。

5.         在VS中计算屏幕坐标时要把坐标先转换成齐次坐标

a)         这样写是有问题的,mul(input.Position, WorldViewTransform);

b)         要改成mul(float4(input.Position,1), WorldViewTransform);

6.         文件最后一行要在最后加一个空格或一个空行,要不有时会有error X3000: syntax error: unexpected end of file,这样的错误信息,这种错误信息有时莫明其妙发生,例如在加了一条注释后,总之是在编写Effect的时候要格外小心谨慎。

7.         前几天还遇到了这样的错误,在ps中写了个if语句返回某种颜色,不料产生错误,错误信息如下error X3500: asymetric returns from if statements not yet implemented。现在把Effect文件内容张帖出来,为了搞清楚问题本质,我把不相关代码全部删除了,只留下必要地解释性代码。一开始没注意看错误信息,以为是那里写错了,就几十行代码折腾半天不见好转,后来仔细看错误信息后才恍然大悟,原来是Effect编译器不支持这种if用法,虽然HLSL支持以c的语法来写shader,但毕竟和c还是有区别的,编译下面的代码就会得到上述错误信息,只要在第二个return前加else,使其成为一个ifelse结构,编译自然通过。由此可见,写shaderc的观念在某些情况下要转变过来,如果一味以c的直观印象去评测,极有可能出现问题。

 1 // 默认效果文件
 2
 3 bool  flag  =   true ;
 4
 5 float4 PS(float2 pos : TEXCOORD0) : COLOR
 6 {    
 7    if (flag)
 8        return float4(1,1,1,1);
 9    return float4(0,0,0,1);
10}

11
12 technique Specular20
13
14    pass P0
15    
16        PixelShader = compile ps_2_0 PS();
17    }

18}

 

以上几点皆为个人经验小节,以后遇到再做补充,某些可能还有问题,不足之处请指出共勉。文章中提到的Effect文件可以在这里下载。/Files/gogoplayer/HLSL/Test.rar


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值