用過3dmax的人都知道,乙個3d場景是由很多
模型(model)組成的,而模型就是通常說的
網格(mesh), 它是由
三角形面(********)組成,而每個三角形面又是由3個
頂點(vertex)構成。如圖:
材質(materal)和紋理(texture):
光有網格模型看上去就是乙個物品的輪廓,為了讓模型具有真實感,我們就要為模型賦予材質和紋理。
材質包含顏色,d3d中這樣定義顏色:
typedef struct d3dxcolor材質的定義是:d3dxcolor;
// 材質而紋理是附著在模型上的**,在d3d中用idirect3dtexture8介面管理紋理。typedef struct _d3dmaterial8
d3dmaterial8;
下面是乙個指定了材質和紋理的模型,看上去是不是真實多了。
向量(vector):
我們說乙個模型就是乙個物件:
物件都有其位置和方向,在3d空間中由三個值定義:x,y,z。
d3d中的位置和方向都是向量,向量定義為:
typedef struct _d3dvector矩陣(matrix):d3dvector;
物件有了方向和位置後,要對其進行移動、放縮和旋轉等處理就需要用到矩陣。矩陣在d3d中的定義如下:
typedef struct _d3dmatrix這是乙個4*4的矩陣,通過矩陣變換能實現物件的各種處理。關於矩陣的知識,請大家下去看線形代數的書,這裡就不詳細介紹了。什麼?你沒有學過線形代數,沒關係,死記吧,把幾個重要的變換公式記住就好了(平移、放縮和旋轉),其他任何複雜的變換都是通過這幾個基本的變換組合而成的。;float m[4][4];
};} d3dmatrix;
再給大家吃個寬心丸吧,就算你記不住這些公式也無所謂,d3d已經把他們做好了,通過幾個簡單的函式呼叫就能實現麻煩的矩陣運算了,呵呵,微軟還是為大家想的很周到的。
燈光(light):
有了物件,還必須有燈光,否則我們將什麼都看不到。d3d中的燈光有兩4種:
環境光:對場景中所有的物件都提供了固定不變的照明。
點光源:是從乙個點發出的光。燈泡就可以理解為點光源。
聚光源:正如它的的名字一樣,是有方向和強弱的,電筒就是典型的聚光源。
方向光:常用於模擬太陽光和其它無窮遠的光源。這種光源被看作來自無窮遠,它的強度不隨著接近物件而變化。在唯一的方向上,亮度是固定的。 d3d光源定義是這樣的:
typedef struct _d3dlight8攝像機(camera):d3dlight8;
為了能看見物件,d3d定義了攝像機來代表使用者觀察3d世界。攝像機有乙個位置和乙個方向,它們定義了觀察者在3d世界的何處和看到的是什麼。在3d世界裡移動攝像機和改變它的方向使我們看到的世界真實的動起來。
在d3d中沒有專門定義攝象機的結構,我們是通過設定乙個觀察矩陣來控制攝象機的。
pd3ddevice->settransform( d3dts_view, &m_matview ); // m_matview就是攝象機的觀察矩陣。
今天講了不少概念性的東西,我想你們也看的煩了,再說下去估計就該換到其他**去了。好了,今天就到這裡吧。晚上我還要去書店看書,騎車要很遠的路,天氣又熱,真煩啊~~
下一次我們就開始實際動手,打造你的第乙個d3d程式。
3d基本概念
乙個 場景是由很多模型 model 組成的,而模型就是通常說的網格 mesh 它是由三角形面 組成,而每個三角形面又是由 個頂點 vertex 構成。如圖 材質 materal 和紋理 texture 光有網格模型看上去就是乙個物品的輪廓,為了讓模型具有真實感,我們就要為模型賦予材質和紋理。材質包含...
3D數學基本概念
向量 概念 有大小,有方向的箭頭,但是向量是沒有位置的概念。方向就是從a點指向b點的方向,大小就是a點到b點的距離,這個距離就是向量的長度,叫做向量的模 和向量相關的幾個概念 負向量 和原向量方向相反,大小相等的向量。零向量 大小為0,沒有方向。單位向量 模長為1的向量叫單位向量。如果想讓乙個向量在...
3D的基本概念
頂點 乙個點在空間中的位置,描述具有x y z座標的空間位置。多邊形 通過連線多個頂點形成 網格 由乙個或多個多邊形組成 一般是三角形 四邊形 3d圖形是由3d網格構成的,3d網格也被稱為模型。紋理 物體的表面上繪製的圖案。材質 物體表面各可視屬性的結合,可以看出物體是由什麼材料組成的。這些可視屬性...