Shader程式設計最容易犯的低階錯誤

2021-04-12 16:43:04 字數 1712 閱讀 8960

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。範圍擴張 每個人都知道專案需要滿足需求,但是由於架構師都是技術出身,所以老是會沿用程式設計師的那種完美主義精神,總是想把自己的系統做到最好,無形中卻...