DirectX 9 0筆記 第五章 燈光

2022-09-04 10:18:06 字數 2493 閱讀 9449

1.環境光(ambient light): 這種燈光被其他所有表面反射。

2.漫反射(diffuse reflection) : 當它照射到乙個表面時,它將在所有方向上均勻的反射。

3.鏡面反射(specular reflection): 當它照到乙個表面時,它嚴格地按照乙個方向反射。

其中鏡面反射比其他燈光要求更多的計算。它預設是被關閉的。要使用鏡面光必須設定d3drs_specularenable渲染狀態。

每一種光都是通過d3dcolorvalue結構或者描述燈光顏色的d3dxcolor來描述的。在d3dxcolor類中alpha的值用在描述燈光顏色時是被忽略的。

在現實世界物理顏色是由物體反射的顏色決定。direct3d通過我們定義的物體材質來模擬這些所有的現象。材質允許我們定義表面反射燈光的百分比。在**中通過3d3matrial9結構描述乙個材質。

 diffuse——指定此表面反射的漫射光數量。

 ambient——指定此表面反射的環境光數量。

 specular——指定此表面反射的鏡面光數量

 emissive——這個是被用來給表面新增顏色,它使得物體看起來就象是它自己發出的光一樣。

 power——指定銳利的鏡面高光;它的值是高光的銳利值.

面法線是描述多邊形表面方向的乙個向量頂點法線也是基於同樣的概念。direct3d需要知道頂點法線一邊他能狗確定燈光照射到物體表面的角度。

為了描述頂點的頂點法線,我們必須更新原來的頂點結構:

下面是乙個c函式,它通過三角形的三個頂點計算三角形的面法線。注意這個函式的三個頂點是按照順時針方向指定的。假如不是這樣,那麼法線方向將是相反的

當用三角形近似表示曲面時,使用面法線作為頂點法線不能表現乙個平滑的結果。乙個更好的方法是找到頂點法線的平均法線。為了找到頂點v的頂點法線vn,我們找到網格模型中所有三角形的面。法線記為頂點v。vn是通過計算他們的平均面法線得到的。這裡有乙個例子,假設有3個三角形它們的面法線分別是n0,n1,n2,指定為頂點v。那麼vn的平均法線就是:

通過改變"舞台",把頂點法線變為non-normal,這是有可能的。因此這樣最好是安全的且在通過d3drs_normalizenormals設定渲染狀態來改變"舞台"後,direct3d從新規格化所有法線。

direct3d 支援三種型別的光源。

在**中乙個燈光資源是通過d3dlight9結構來表現的。

 type——定義燈光型別,我們能夠使用下面三種型別之一:d3dlight_point,

d3dlight_spot, d3dlight_directional

 diffuse——此光源發出的漫射光顏色。

 specular——此光源發出的鏡面光顏色。

 ambient——此光源發出的環境光顏色。

 position——用乙個向量來描述的光源世界座標位置。這個值對於燈光的方向是無意義的。

 direction——用乙個向量來描述的光源世界座標照射方向。這個值不能用在點光源上。

 range——燈光能夠傳播的最大範圍。這個值不能比

大。且不能用於方向光源。

 falloff——這個值只能用在聚光燈上。它定義燈光在從內圓錐到外圓錐之間的強度衰減。它的值通常設定為1.0f。

 attenuation0, attenuation1, attenuation2——這些衰減變數被用來定義燈光強度的傳播距離衰減。它們只被用於點光源和聚光燈上。attenuation0定義恆定衰減,attenuation1定義線性衰減,attenuation2定義二次衰減。適當的使用這個公式,d是代表到光源的距離,a0,a1,a2與attenuation0,1,2相匹配。

 theta——只用於聚光燈;指定內圓錐的角度,單位是弧度。

 phi——只用於聚光燈;指定外圓錐的角度,單位是弧度。

就象初始化d3dmaterial9結構一樣,初始化d3dlight9結構是一件單調乏味的工作。我們新增下面的函式到d3dutility.h/cpp檔案中用於初始化簡單燈光。

在把d3dlight9初始化好以後,我們需要用direct3d內在支援的燈光來註冊。就象這樣做:一旦燈光註冊了,我們就能使用下面的列舉的例子來開或關燈光了:

programming in lua 第五章筆記

當乙個函式只有乙個引數,而且這個引數的型別是字串或者table,那麼函式的 可以省略 函式的引數是乙個local變數 lua函式可以返回多個返回值 s,e string.find hello lua users lua print s,e 7 9 可以強制函式只返回1個返回值 print foo0 ...

第五周筆記

函式中包含yield語句的函式就是生成器函式,呼叫返回生成器物件.yield 是個表示式,可以返回值.生成器表示式 m i for i in range 10 生成器的應用 1,無限迴圈 2,計數器 3,斐波那契數列 4,生成器互動 5,協程coroutine lambda構建匿名函式 定義 lam...

SQL筆記 第五章

第五章 pl sql游標 1.游標 cursor 游標是從資料表中提取出來的資料,以臨時表的形式存放在記憶體中,在游標中有乙個數 據指標,在初始狀態下指向的是首記錄,利用 fetch 語句可以移動該指標,從而對游標中的數 據進行各種操作,然後將操作結果寫回資料表中。1 分類 a 顯式游標 程式設計師...