3d基本概念

2021-05-25 00:06:43 字數 1669 閱讀 4882

乙個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就是攝象機的觀察矩陣。

3D基本概念

用過3dmax的人都知道,乙個 場景是由很多 模型 model 組成的,而模型就是通常說的 網格 mesh 它是由 三角形面 組成,而每個三角形面又是由 個 頂點 vertex 構成。如圖 材質 materal 和紋理 texture 光有網格模型看上去就是乙個物品的輪廓,為了讓模型具有真實感,我們...

3D數學基本概念

向量 概念 有大小,有方向的箭頭,但是向量是沒有位置的概念。方向就是從a點指向b點的方向,大小就是a點到b點的距離,這個距離就是向量的長度,叫做向量的模 和向量相關的幾個概念 負向量 和原向量方向相反,大小相等的向量。零向量 大小為0,沒有方向。單位向量 模長為1的向量叫單位向量。如果想讓乙個向量在...

3D的基本概念

頂點 乙個點在空間中的位置,描述具有x y z座標的空間位置。多邊形 通過連線多個頂點形成 網格 由乙個或多個多邊形組成 一般是三角形 四邊形 3d圖形是由3d網格構成的,3d網格也被稱為模型。紋理 物體的表面上繪製的圖案。材質 物體表面各可視屬性的結合,可以看出物體是由什麼材料組成的。這些可視屬性...