高級(jí)著色語(yǔ)言HLSL入門(mén)(7) 摘要:
大多數(shù)函數(shù)已經(jīng)重載以使其可以對(duì)所有內(nèi)建類(lèi)型有意義。例如,abs對(duì)所有數(shù)值類(lèi)型有意義,所以它為所有這些數(shù)值類(lèi)型進(jìn)行了重載。又例如,叉積的叉乘僅對(duì)
3D向量有意義,所以它對(duì)所有類(lèi)型的3D向量(比如:int,float,double的3D向量)進(jìn)行了重載。另一方面,線性插值——lerp,對(duì)于數(shù)值、2D、3D和4D向量有意義,因此重載了這些類(lèi)型。
高級(jí)著色語(yǔ)言HLSL入門(mén)(6) 摘要:
HLSL有一個(gè)豐富的內(nèi)建函數(shù)的集合,它們對(duì)3D圖形來(lái)說(shuō)非常有用。下表是一個(gè)刪減了的列表,注意:要得到更多的參考,可以參看DirectX文檔中內(nèi)建HLSL函數(shù)的完整列表。
高級(jí)著色語(yǔ)言HLSL入門(mén)(5) 摘要: 為便于參考,這里給出一個(gè)HLSL定義的關(guān)鍵字列表:
高級(jí)著色語(yǔ)言HLSL入門(mén)(4) 摘要: HLSL支持下列數(shù)值類(lèi)型(scalar type):
bool—True or false value. Note that HLSL provides the true and false
keywords.
int—32bit signed integer
half—16bit floating-point number
float—32bit floating-point number
double—64bit floating-point number
注意:一些平臺(tái)不支持int, half, and double類(lèi)型,這時(shí)我們使用 float類(lèi)型模擬。
高級(jí)著色語(yǔ)言HLSL入門(mén)(3) 摘要:
下一個(gè)方法就是設(shè)置常量的默認(rèn)值,這些默認(rèn)值在聲明時(shí)初始化。這個(gè)方法應(yīng)該在應(yīng)用程序建立(setup)期間被調(diào)用一次 (called once)。
高級(jí)著色語(yǔ)言HLSL入門(mén)(2) 摘要:
每個(gè)著色器有一個(gè)常量表,用來(lái)保存它的變量。D3DX庫(kù)通過(guò)ID3DXConstantTable接口,提供給應(yīng)用程序訪問(wèn)著色器的常量表。通過(guò)這個(gè)接口我們能夠在應(yīng)用程序中設(shè)置著色器源代碼中的變量。
我們現(xiàn)在描述ID3DXConstantTable接口的方法列表的實(shí)現(xiàn),全部的列表請(qǐng)查閱Direct3D文檔。
高級(jí)著色語(yǔ)言HLSL入門(mén)(1) 摘要:
在我們寫(xiě)的程序里頂點(diǎn)和像素是很小的對(duì)象,它們由GPU來(lái)執(zhí)行,是固定功能管線的一部分。用我們自己寫(xiě)的著色器程序替換一部分固定功能管線,在繪制效果上我們獲得很大的靈活性。我們不再局限于預(yù)定義的"固定"操作。
為了編寫(xiě)著色器程序,我們需要一種高級(jí)著色器語(yǔ)言(High-Level Shading Language ,簡(jiǎn)稱(chēng)HLSL) 。在DirectX
8中,著色器是用低級(jí)著色器匯編語(yǔ)言編寫(xiě)的。幸運(yùn)的是,我們不必再用匯編語(yǔ)言來(lái)寫(xiě)著色器了,DirectX 9支持一種高級(jí)著色器語(yǔ)言來(lái)寫(xiě)。