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