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