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

2021-09-30 06:17:47 字數 2027 閱讀 2753

::金點時空::

第二回:3d基本概念上一回我們建立起了d3d的程式設計環境,但是不要著急開始編碼,我們還是先來看看3d中的一些基本概念,這些東西都是3d程式設計基礎中的基礎,一定要牢記。

用過3dmax的人都知道,乙個3d場景是由很多模型(model)組成的,而模型就是通常說的網格(mesh), 它是由三角形面(********)組成,而每個三角形面又是由3個頂點(vertex)構成。如圖:

材質(materal)和紋理(texture):

光有網格模型看上去就是乙個物品的輪廓,為了讓模型具有真實感,我們就要為模型賦予材質和紋理。

材質包含顏色,d3d中這樣定義顏色:

typedef struct d3dxcolor

d3dxcolor;

材質的定義是:

// 材質

typedef struct _d3dmaterial8

d3dmaterial8;

而紋理是附著在模型上的**,在d3d中用idirect3dtexture8介面管理紋理。

下面是乙個指定了材質和紋理的模型,看上去是不是真實多了。

向量(vector):

我們說乙個模型就是乙個物件:

物件都有其位置和方向,在3d空間中由三個值定義:x,y,z。

d3d中的位置和方向都是向量,向量定義為:

typedef struct _d3dvector

d3dvector;

矩陣(matrix):

物件有了方向和位置後,要對其進行移動、放縮和旋轉等處理就需要用到矩陣。矩陣在d3d中的定義如下:

typedef struct _d3dmatrix

;float m[4][4];

};} d3dmatrix;

這是乙個4*4的矩陣,通過矩陣變換能實現物件的各種處理。關於矩陣的知識,請大家下去看線形代數的書,這裡就不詳細介紹了。什麼?你沒有學過線形代數,沒關係,死記吧,把幾個重要的變換公式記住就好了(平移、放縮和旋轉),其他任何複雜的變換都是通過這幾個基本的變換組合而成的。

再給大家吃個寬心丸吧,就算你記不住這些公式也無所謂,d3d已經把他們做好了,通過幾個簡單的函式呼叫就能實現麻煩的矩陣運算了,呵呵,微軟還是為大家想的很周到的。

燈光(light):

有了物件,還必須有燈光,否則我們將什麼都看不到。d3d中的燈光有兩4種:

環境光:對場景中所有的物件都提供了固定不變的照明。

點光源:是從乙個點發出的光。燈泡就可以理解為點光源。

聚光源:正如它的的名字一樣,是有方向和強弱的,電筒就是典型的聚光源。

方向光:常用於模擬太陽光和其它無窮遠的光源。這種光源被看作來自無窮遠,它的強度不隨著接近物件而變化。在唯一的方向上,亮度是固定的。 d3d光源定義是這樣的:

typedef struct _d3dlight8

d3dlight8;

攝像機(camera):

為了能看見物件,d3d定義了攝像機來代表使用者觀察3d世界。攝像機有乙個位置和乙個方向,它們定義了觀察者在3d世界的何處和看到的是什麼。在3d世界裡移動攝像機和改變它的方向使我們看到的世界真實的動起來。

在d3d中沒有專門定義攝象機的結構,我們是通過設定乙個觀察矩陣來控制攝象機的。

pd3ddevice->settransform( d3dts_view, &m_matview ); // m_matview就是攝象機的觀察矩陣。

今天講了不少概念性的東西,我想你們也看的煩了,再說下去估計就該換到其他**去了。好了,今天就到這裡吧。晚上我還要去書店看書,騎車要很遠的路,天氣又熱,真煩啊~~

下一次我們就開始實際動手,打造你的第乙個d3d程式。

主頁:郵件:[email protected]

soft於2002-7-7午後返回

金點時空 2000/7/7

www.gpgame.net

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

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

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

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

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

金點時空 第七回 燈光可能秋天就要到了,最近天氣總是突冷忽熱的,一不小心就要著涼。雖然我已經很注意了,但還是沒能逃過這一劫,幸好吃藥吃的及時 到位,再加上 的悉心照料,終於是挺了過來。再說點題外話,就在前幾天,金點時空的網域名稱 www.gpgame.com 註冊一年到期了,我們正在進行續費,但是目...