摘要: 大多數(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有一個(gè)豐富的內(nèi)建函數(shù)的集合,它們對3D圖形來說非常有用。下表是一個(gè)刪減了的列表,注意:要得到更多的參考,可以參看DirectX文檔中內(nèi)建HLSL函數(shù)的完整列表。
閱讀全文
摘要: 為便于參考,這里給出一個(gè)HLSL定義的關(guān)鍵字列表:
閱讀全文
摘要: 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類型,這時(shí)我們使用 float類型模擬。
閱讀全文
摘要: 下一個(gè)方法就是設(shè)置常量的默認(rèn)值,這些默認(rèn)值在聲明時(shí)初始化。這個(gè)方法應(yīng)該在應(yīng)用程序建立(setup)期間被調(diào)用一次 (called once)。
閱讀全文
摘要: 每個(gè)著色器有一個(gè)常量表,用來保存它的變量。D3DX庫通過ID3DXConstantTable接口,提供給應(yīng)用程序訪問著色器的常量表。通過這個(gè)接口我們能夠在應(yīng)用程序中設(shè)置著色器源代碼中的變量。
我們現(xiàn)在描述ID3DXConstantTable接口的方法列表的實(shí)現(xiàn),全部的列表請查閱Direct3D文檔。
閱讀全文
摘要: 在我們寫的程序里頂點(diǎn)和像素是很小的對象,它們由GPU來執(zhí)行,是固定功能管線的一部分。用我們自己寫的著色器程序替換一部分固定功能管線,在繪制效果上我們獲得很大的靈活性。我們不再局限于預(yù)定義的"固定"操作。
為了編寫著色器程序,我們需要一種高級著色器語言(High-Level Shading Language ,簡稱HLSL) 。 在DirectX 8中,著色器是用低級著色器匯編語言編寫的。幸運(yùn)的是,我們不必再用匯編語言來寫著色器了,DirectX 9支持一種高級著色器語言來寫。
閱讀全文
摘要: 假設(shè)用戶點(diǎn)擊了屏幕上的點(diǎn) s (x, y)。 從圖15.1我們能看到用戶選取了茶壺。無論如何,應(yīng)用程序無法根據(jù)給定的s點(diǎn)就立即確定茶壺是被選取。
我們知道一些知識:關(guān)于茶壺和它的關(guān)聯(lián)點(diǎn)s,茶壺投影在圍繞s點(diǎn)的區(qū)域,更準(zhǔn)確的說是:它投影到投影窗口上圍繞p點(diǎn)的區(qū)域,與它對應(yīng)的屏幕點(diǎn)是s。因?yàn)檫@個(gè)問題依賴于3D物體與它的投影之間的關(guān)系,我們看圖15.2就可以了解。
閱讀全文
摘要: 許多自然現(xiàn)象是由很多小的小顆粒組成的,它們有相似的行為。(例如,雪花落下,閃爍的火焰,沖出槍管的“子彈”),粒子系統(tǒng)用來模擬這種現(xiàn)象。
粒子是一個(gè)很小的對象,它通常用來模擬數(shù)學(xué)中的一個(gè)點(diǎn)。點(diǎn)元是用來顯示粒子的很好的方案,可是點(diǎn)元被光柵化成一個(gè)簡單的像素。這沒給我們多少靈活性,因?yàn)槲覀兿胗懈鞣N大小不同的粒子,并且把整個(gè)紋理平滑映射到這些粒子上。在Direct3D 8.0以前,因?yàn)辄c(diǎn)元方法的局限性而完全不使用他們。代替的方法是程序員將使用公告板去顯示粒子,一個(gè)板是一個(gè)方格,世界矩陣用它來確定方向,使它總是朝向照相機(jī)。
閱讀全文
摘要: 本例程實(shí)現(xiàn)了一個(gè)粒子槍系統(tǒng),運(yùn)行效果如圖14.4所示:
閱讀全文