Shader學習心得

2021-06-16 05:40:06 字數 3197 閱讀 3755

1.1 序言

以前一直覺得,學習shader最好是在visual studio的環境下進行學習,因為這樣不僅能夠學到directx和c++的一些使用方法,而且對於shader在實際應用時也有好處.結果今天就碰得灰頭土臉的.

1.2 碰壁過程

下面是我的程式段:

id3dxeffect* g_peffect = null; 

3dxcreateeffectfromfile( g_pd3ddevice, "******.fx", null, null, dwshaderflags, null, &g_peffect, null );

下面是我的.fx程式:

float4x4 worldviewproj : worldviewprojection; 

float4 mainvs(float3 pos : position) : position 

float4 mainps() : color  

technique technique0  }

編譯的時候沒有提示錯誤,也可以執行.但是在執行中出錯,沒有出錯的資訊.

對於幾乎沒有在vs c++環境下程式設計的我來說.這是非常抓狂的事情.在網上找了下**,把我的程式改了一下,可以看到錯誤資訊了.下面是修改後的程式段

id3dxbuffer* error_buffer; 

hr = d3dxcreateeffectfromfile( g_pd3ddevice, "******.fx", null, null, dwshaderflags, null, &g_peffect, &error_buffer ); 

if(error_buffer) 

if(failed(hr)) 

下面是出錯的資訊:

看不清楚?這裡檢視原圖(大圖)。

大概是說現在ps_1_x的版本不被支援了.於是乎,我想到,如果還有一些其他的疑難雜症,如果我想除錯shader,如果我想很快的能夠在修改shader後,把matieral賦值,如果我想方便的建立view和projection矩陣.那vs顯然是不能勝任的.

花了點時間找了找.使用nvidia的 fx composer 2.5是乙個很好的選擇.它支援d3d10,而且有乙個類似於3dmax的視窗,可以拖動物體,這樣也不用很麻煩的去建立view和projection矩陣.操作也很方便,比ati的那個工具感覺還好一點.用來學習shader是很不錯的選擇(廣告啊)

在nvidia的**上可以方便的下到它

com/tools/shader_debugger/fx_composer2_shader_debugger_bundle_2.51.0827.1525.exe

安裝時注意要選擇no commercial,這樣就不會被要求輸入序列號了.

1.3 建立我們的第乙個shader

選擇file-new project:

step 1: 選擇

step 2: 選擇

step 3: 把白圓拖動到右下角的球上,把特效和物體關聯,這個特效檔案的執行效果如下:

是不是感覺到非常的」所見即所得」?

如果你想看看這個shader檔案,在白圓上面按右鍵,選擇edit,顯示出的就是.fx檔案的源程式,把這個程式複製到vs裡面,進行了相關了初始化和設定引數操作後,也可以正常了使用了.

fx composer 2.5的其他情況你也可以自己看看安裝後的幫助檔案,我這裡就不說太多了(其實我也是今天才開始用的,以後有了心得再慢慢寫出來 :-d)今後的重點主要放在shader的編寫上.

2.1 為我們的shader增加貼圖

step 1:  在我們的empty effect中:

float4x4 worldviewproj : worldviewprojection;

下面一行按右鍵,選擇」insert snippets」

在右邊的框中選擇」texture and sampler」

在打了乙個框的name上面雙擊,修改為diffuse,這樣所有的」name」就自動變為了」diffuse」了

step 2: 新增程式段,使得**變為

float4x4 worldviewproj : worldviewprojection;

texture diffuse <

string resourcename = "";//optional default file name

string uiname = "diffuse texture";

string resourcetype = "2d";

>;

sampler2d diffusesampler = sampler_state ;

struct vs_output

;vs_output mainvs(float4 pos : position,float2 tex : texcoord0)

float4 mainps(float2 tex : texcoord0) : color

technique technique0

}step 2:選擇我們的empty effect檔案,在右上方的property **的 parameter中的」diffuse texture」選項中選擇乙個你喜歡的貼**件.

step 3:按下ctrl + f7,編譯shader,然後把這個shader拖動到我們需要顯示的物體上面

2.2 解釋**的含義

texture diffuse <

string resourcename = "";//optional default file name

string uiname = "diffuse texture";

string resourcetype = "2d";

>;

可能很多人對**中 < … > 中的內容感覺到很茫然,其實這些內容對我們directx中使用來說用處不大,主要作用是使得fx composer可以識別出我們的引數,並且在引數面板中顯示,方便我們修改

return tex2d(diffusesampler, tex);

根據diffusesample取樣器,對tex所對應的貼圖座標進行插值運算,如果你對這塊**理解不清楚,請自己找本hlsl相關的書籍看看.第一章開頭的引用數目或許對你有幫助

2.3 執行效果

**:

shader學習心得

概論 很早就聽說過shader,作為計算機圖形渲染的重要的流程之一,乙個月前也是想找有關相關書籍寒假來入門入門圖形學這個大坑,有幸找到女神的這本 unity shader入門精要 從今天開始來寫一寫學習這本書的一些心得,作為自己的學習筆記。shader目前在國內發展還是剛起步,一些資料還不完全,這也...

學習心得 python學習心得

自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...

學習心得 我的學習心得

我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...