shader程式設計最容易犯的低階錯誤
日期: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只能得到一組紋理座標,且維數與宣告的一致
你不能寫成這樣:
void
ps_main(float3 coords : texcoord0, //=>
維數與宣告必須一致
float2 myvar : texcoord1, //=>
不能任意增加第二個 …
)
!!!!新手最容易犯的錯誤
今天寫了乙個很簡單的程式,輸入三個不同長度的字串,然後將其右對齊顯示 因為剛學了幾天,經常會犯一些錯誤,如下 file day01.py line 62 print maxn len b b syntaerror invalid syntax 以上是之前的錯誤,找了好半天,也一直沒有發現,從頭到尾推...
IT人才最容易犯的17個錯誤
記得剛參加工作時 那是97年 中國的it剛剛興起,那時,作為乙個it人士是一件很光榮的事,而那時的我正在做電氣和電子相關的工作。99年第一次跳槽,進入了it行業做軟體開發。至今,中國的it已經走過了十多年。但昔日的 光榮一員 卻成為了現在的 it農民工 這究竟是怎麼了?是中國的it發展已經很好了所造...
軟體架構師最容易犯的錯誤
最近看了一些文章,加上自己的一些經驗,總結一下軟體架構師 有的稱之為解決方案架構師 最容易犯的一些錯誤。希望可以和架構師們共勉,個人觀點,難免偏頗。1。範圍擴張 每個人都知道專案需要滿足需求,但是由於架構師都是技術出身,所以老是會沿用程式設計師的那種完美主義精神,總是想把自己的系統做到最好,無形中卻...