3D遊戲從頭編 第七回 燈光

2021-09-30 06:17:47 字數 1429 閱讀 3165

::金點時空::

第七回:燈光可能秋天就要到了,最近天氣總是突冷忽熱的,一不小心就要著涼。雖然我已經很注意了,但還是沒能逃過這一劫,幸好吃藥吃的及時、到位,再加上gf的悉心照料,終於是挺了過來。

再說點題外話,就在前幾天,金點時空的網域名稱(www.gpgame.com)註冊一年到期了,我們正在進行續費,但是目前還沒有開通,所以大家請先使用(www.gpgame.net)訪問我們的**。

好了,言歸正傳,開始說我們今天的主題--燈光。

在d3d中有4種型別的燈光,用它們可以讓3d世界顯得真實。

一、環境光(ambient light)

最簡單的一種光,只有乙個顏色值,它為世界提供乙個基本的照明亮度。沒有方向、沒有衰減,也不會產生陰影。

二、點光(point light)

從乙個點向周圍均勻發射的光,有最大的照明範圍,亮度隨距離衰減,最明顯的乙個例子就是我們家裡用的燈泡。

三、方向光(directional light)

方向光是一組沒有衰減的平行光,類似太陽光的效果。

四、聚光燈(spot light)

最複雜的一種燈,有光源點位置、有方向、有範圍、有發光的內徑和外徑,光照強度還會隨距離衰減。類似的例子是電筒。

在d3d中用結構d3dlight8來設定燈光的屬性,不同型別的燈光需要指定不同的屬性,下面對這些屬性做個簡要說明:

typedef struct _d3dlight8 d3dlight8;

燈光的屬性設定好後,需要把這個燈光加入到場景中,使用下面的程式做這件事情。

// 要讓渲染的時候燈光起作用,執行這條命令

g_pd3ddevice->setrenderstate( d3drs_lighting, true );

// 設定0號燈為我們設定的燈

g_pd3ddevice->setlight( 0, &light );

// 開啟0號燈光

g_pd3ddevice->lightenable( 0, true );

在這一回的例子程式中,我們讓乙個水平方向的方向光繞著y軸旋轉,然後讓乙個黃色的圓筒繞x軸旋轉,看看實際的效果圖:

在使用燈光的時候需要注意的一點是,要為每個頂點設定法線,只有設定了法線,燈光才會起作用。什麼是法線?其實就是乙個和該點所在面垂直的向量。(不懂就下去看書,這些基礎知識如果都不知道的話,那誰也幫不了你)

差不多了,差不多了,再講的話,就算我不煩,恐怕你也快暈掉了。d3d的燈光真的有點麻煩,想掌握的話就多花點時間去試試每種燈光的實際效果吧,在這裡我畢竟只能說方法,具體行動還要靠大家的。下一回我們講怎麼貼圖,加油吧。

好了,就到這裡,睡先。

主頁:郵件:[email protected]

soft於2002-8-11凌晨2點

返回

金點時空 2000/8/11

www.gpgame.net

3D遊戲從頭編 第八回 紋理

第八回 紋理人們總是容易忽略身邊的一些事情,越是熟悉 越是親密就越會發生,為什麼呢?我也不知道,不過既然已經發生了,也就沒有必要再去埋怨什麼。立刻採取實際的行動,那才是我們唯一應該做的事情!什麼是紋理?紋理就是我們通常說的貼圖 又叫蒙皮 其原理就是在 的模型上面覆蓋上 的,讓我們的 模型顯得更真實。...

3D遊戲從頭編 第四回 頂點渲染

金點時空 第四回 頂點渲染這個週末有朋友過來成都玩,一群人去春熙路的紅帽象玩跳舞機,好久沒有運動,累得沒力氣,導致本週的文章沒有在週末完成。不過還好,睡了一覺後精神又恢復了,以後一定要加強鍛鍊。這一回我們來說說 中最基礎的東西 頂點渲染,這個東西就和 遊戲中的畫點是乙個道理,重要性就不多說了,乙個字...

3D遊戲從頭編 第二回 3D基本概念

金點時空 第二回 3d基本概念上一回我們建立起了 的程式設計環境,但是不要著急開始編碼,我們還是先來看看 中的一些基本概念,這些東西都是 程式設計基礎中的基礎,一定要牢記。用過3dmax的人都知道,乙個 場景是由很多模型 model 組成的,而模型就是通常說的網格 mesh 它是由三角形面 組成,而...