Shader编程最容易犯的低级错误
2007-01-16 11:46
309 查看
[align=center]Shader编程最容易犯的低级错误[/align]
作者:cywater2000
日期:2007-1-16
来自:http://blog.csdn.net/cywater2000
前段时间本人一直在用shader写程序,看似简单,结果发现经常犯低级错误。由于调试shader比较麻烦,特别是pixel shader(简称ps),所以有时候一个小错误会花掉好几个小时甚至一天的功夫才能找到。于是本人把工作中遇到的问题都总结了下来,希望以后自己不要再犯,同时也希望对别人有所帮助(什么?这些BC级错误你从来没犯过?u kidding… - -!)。
在这里我用“*”来表示痛苦指数 >_<~~
1.忘记计算光照应该在同一坐标系下(如view space,tangent space)
**
2.忘记矢量要单位化
**
3.忘记矢量的w=0(顶点的w=1)
***
4.mul的左操作数与右操作数搞错
**
mul(vector, matrix)显然与mul(matrix, vector)是不一样的
5.忘记ps的参数都是线性插值传过去的
*
6.忘记变量的维度(例如:写成float color,实际上应该是float4 color)
*
7.给shader传递变量时总是忘记检查返回值
*****
D3D并不会提示有错误发生(比如输出警告信息),所以要养成检查返回值的习惯
比如V( g_pEffect->SetVector(…) );
8.忘记所有的计算应该在同一个scale下进行
******
这个在GPGPU中经常犯,比如在[-1,1]的尺度下你用[0,100]来计算。目前我遇到过最痛苦的事…
9.忘记texel/pixel的取值是在cell的中心
***
比如:如果将lookup表变成纹理,则查询的时候应该是tex1D(s0, (index + 0.5) / TextureSize);
10. 对于使用已经变换的(transformed)顶点,无法任意设置vs的输出数据
**
即如果顶点格式声明为:D3DFVF_XYZRHW | D3DFVF_TEX1
则ps只能得到一组纹理坐标,且维数与声明的一致
你不能写成这样:
[align=left]void ps_main(float3 coords : TEXCOORD0, //=>维数与声明必须一致[/align]
[align=left] float2 myvar : TEXCOORD1, //=>不能任意增加第二个[/align]
[align=left]…)[/align]
作者:cywater2000
日期:2007-1-16
来自:http://blog.csdn.net/cywater2000
前段时间本人一直在用shader写程序,看似简单,结果发现经常犯低级错误。由于调试shader比较麻烦,特别是pixel shader(简称ps),所以有时候一个小错误会花掉好几个小时甚至一天的功夫才能找到。于是本人把工作中遇到的问题都总结了下来,希望以后自己不要再犯,同时也希望对别人有所帮助(什么?这些BC级错误你从来没犯过?u kidding… - -!)。
在这里我用“*”来表示痛苦指数 >_<~~
1.忘记计算光照应该在同一坐标系下(如view space,tangent space)
**
2.忘记矢量要单位化
**
3.忘记矢量的w=0(顶点的w=1)
***
4.mul的左操作数与右操作数搞错
**
mul(vector, matrix)显然与mul(matrix, vector)是不一样的
5.忘记ps的参数都是线性插值传过去的
*
6.忘记变量的维度(例如:写成float color,实际上应该是float4 color)
*
7.给shader传递变量时总是忘记检查返回值
*****
D3D并不会提示有错误发生(比如输出警告信息),所以要养成检查返回值的习惯
比如V( g_pEffect->SetVector(…) );
8.忘记所有的计算应该在同一个scale下进行
******
这个在GPGPU中经常犯,比如在[-1,1]的尺度下你用[0,100]来计算。目前我遇到过最痛苦的事…
9.忘记texel/pixel的取值是在cell的中心
***
比如:如果将lookup表变成纹理,则查询的时候应该是tex1D(s0, (index + 0.5) / TextureSize);
10. 对于使用已经变换的(transformed)顶点,无法任意设置vs的输出数据
**
即如果顶点格式声明为:D3DFVF_XYZRHW | D3DFVF_TEX1
则ps只能得到一组纹理坐标,且维数与声明的一致
你不能写成这样:
[align=left]void ps_main(float3 coords : TEXCOORD0, //=>维数与声明必须一致[/align]
[align=left] float2 myvar : TEXCOORD1, //=>不能任意增加第二个[/align]
[align=left]…)[/align]
相关文章推荐
- 一个关于jar包的低级错误
- 初步确定编码错误原因导致的低级错误
- 低级错误:对象赋值
- 前端中容易犯低级错误的地方
- 低级错误
- 异常处理及日志错误信息备忘——都是那么低级的错误,唉~
- 程序员低级错误大收集,各个痛心疾首。
- getview所犯低级错误
- 初学pyton on django犯的低级错误:need more than 1 value to unpack
- 5/25+5/26 前一天犯的错误太低级了...
- 写 Java 程序最容易犯的 21 种错误实例分析
- jtabel添加数据时犯的低级错误
- 写 Java 程序最容易犯的 21 种错误实例分析
- 初创IT公司里开发者最容易犯的九种错误@http://www.csdn.net/article/2013-12-25/2817919-9-common-mistakes-developers-make
- 初创IT公司里开发者最容易犯的九种错误
- 写 Java 程序最容易犯的 21 种错误
- 4G内存的烦恼:微软也犯低级错误,“录音机”软件抱怨内存不足
- 开发提交hadoop自动运行--hadoop运行低级错误
- Matlab 2017b遇到绘图低级错误
- 今天犯了个很低级错误