3.2
多紋理效果的畫素著色器
下面是畫素著色器的**,該**儲存於ps.txt
中,該畫素著色器根據輸入的兩套紋理座標對對應的紋理貼圖進行取樣,根據一定比例scalar
混合後輸出畫素顏色。 //
全域性變數 //
儲存顏色混合的比例值s
,其中
= s
= 1-s
vector scalar;
//紋理
texture tex0;
texture tex1;
//紋理取樣器
sampler samp0 =
sampler_state
;sampler samp1 =
sampler_state;//
輸入兩套紋理座標
struct ps_input;//
輸出畫素顏色
struct ps_output;//
入口函式
ps_output ps_main(ps_input input)
整個程式很容易理解,程式中涉及到著色器的紋理和取樣,是我們第一次接觸的內容,下面給於說明。
3.2.1
hlsl取樣器和紋理
和vector
、matrix
一樣,取樣器sample
和紋理texture
也是hlsl
語言的一種型別,hlsl
著色器使用取樣器對指定紋理進行取樣,得到取樣後的顏色值以供處理。
它們的用法如下: //
宣告乙個紋理變數
texture g_texture; //
定義取樣器
sampler g_samp =
sampler_state ;
//呼叫hlsl
內建函式tex2d
取得顏色值,引數一為取樣器,引數二為紋理座標
vector color = tex2d(g_samp, uvcoords);
更多hlsl
取樣器和紋理的內容請參見directx
文件。
以上是本例用到的畫素著色器,在接下來的應用程式中,我們將給三個著色器全域性變數賦值: ²
scalar
儲存顏色混合的比例值s
,其中scalar.x = s, scalar.y = 1-s; ²
samp0
第一層紋理取樣器; ²
samp1
第二層紋理取樣器;
畫素著色器的輸入結構中我們設定了乙個頂點對應兩套紋理座標,讀者可以留意一下應用程式中對應的頂點格式的定義。
著色器(Shader)之畫素著色器
畫素著色器實際上就是對每乙個畫素進行光柵化的處理期間,在gpu上運算的一段程式。不同與頂點著色器,畫素著色器不會以軟體的形式來模擬畫素著色器。畫素著色器實質上是取代了固定功能流水線中多重紋理的環節,而且賦予了我們訪問單個畫素以及訪問每乙個畫素紋理座標的能力 多重紋理就是我們同時啟用多層紋理,然後規定...
Unity著色器紋理動畫
unity中shader可以採用cg來書寫.此文演示了如何利用紋理座標來分段街區紋理.正常的紋理座標範圍 0.1 座標超出此範圍可以用多種方式來處理,如wrap,clamp,mirror等.假設紋理分為n段,則,每段對應的紋理座標為 0.1 n index 1 n 使用此規則就可以將紋理分段來擷取了...
顯示卡不支援畫素著色器?
按計畫該發出畫素著色器ps 的內容,無奈家裡的電腦配置太低,顯示卡竟然不支援ps。家裡的顯示卡型號nvidia getforce4 mx 440 又看到網上某牛人如是說 nvidia 曾經推出市場上銷量最好的gf4 mx440 agp 8x 它和高階的gf4 ti 的本質區別就是它僅僅支援verte...