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

2021-09-30 06:17:47 字數 2330 閱讀 7537

::金點時空::

第四回:頂點渲染這個週末有朋友過來成都玩,一群人去春熙路的紅帽象玩跳舞機,好久沒有運動,累得沒力氣,導致本週的文章沒有在週末完成。不過還好,睡了一覺後精神又恢復了,以後一定要加強鍛鍊。

這一回我們來說說d3d中最基礎的東西——頂點渲染,這個東西就和2d遊戲中的畫點是乙個道理,重要性就不多說了,乙個字,「太重要了!」。

渲染的基本步驟是這樣的:

(1)定義頂點格式和fvf

(2)建立頂點緩衝區並填充之

(3)用d3d進行渲染

我們來渲染乙個簡單的三角形,但它的3個頂點顏色不同。

一、首先來看定義頂點格式和fvf

想要渲染頂點,首先你得有個緩衝區,在d3d中這樣定義:

lpdirect3dvertexbuffer8 g_pvb= null; //

頂點緩衝區

然後還得為頂點緩衝區裡的資料定義格式,這樣:

// 自定義頂點結構

struct customvertex

;最後要讓渲染器知道我們定義的格式,你還得定義乙個fvf,fvf在d3d中的解釋是flexible vertex format,意思就是可變的頂點格式,具體的內容你可以參見

dx8的幫助文件,這裡我們這樣定義:

// 我們自定義的

fvf,定義了頂點的結構

// d3dfvf_xyz:

表示頂點座標

// d3dfvf_diffuse:

表示頂點有顏色

#define d3dfvf_customvertex (d3dfvf_xyz|d3dfvf_diffuse)

二、建立頂點緩衝區並填充之

首先建立頂點緩衝區,使用

createvertexbuffer

方法://

建立頂點緩衝區

g_pd3ddevice->createvertexbuffer( 3*sizeof(customvertex),

0,d3dfvf_customvertex,

d3dpool_default,

&g_pvb ) );

第乙個引數表示緩衝區大小,我們給出3個頂點。

第二個引數暫時不管,填0。

第三個引數是我們自定義的fvf

第四個引數表示通過什麼方式建立,用預設值就好了

第五個引數返回緩衝區指標。

建立好了後,我們來填充內容,先自定義乙個三角形:

//三個頂點表示乙個三角形

customvertex g_vertices =

,//

紅色,//

蘭色,//

白色};

然後鎖定緩衝區,並把我們定義的三角形資料拷貝進去:

void* pvertices;

g_pvb->lock( 0, sizeof(g_vertices), (byte**)&pvertices, 0 ) ) ;//

鎖定memcpy( pvertices, g_vertices, sizeof(g_vertices) );//

填充頂點緩衝區

g_pvb->unlock();//

解鎖一切準備就緒了,開始渲染。

三、渲染非常簡單,只需要下面短短的三句就搞定。

// 指定渲染源

g_pd3ddevice->setstreamsource( 0, g_pvb, sizeof(customvertex) );

// 指定自定義的

fvfg_pd3ddevice->setvertexshader( d3dfvf_customvertex );

// 渲染

g_pd3ddevice->drawprimitive( d3dpt_********strip, 0, 1 );

就這麼的簡單,那麼這個程式的具體效果是怎麼樣的呢?,看圖:

呵呵,和我們預設的三角形完全吻合:)

ok,現在你已經掌握了3d顯示的基本原理,那些3d遊戲中的華麗效果都是用頂點渲染出來的!呵呵,是不是對3d程式設計逐漸有些頭緒了?這樣的話我的目的也就達到了,不過千萬不要以為就這麼簡單,麻煩的東西多著呢,還是要靠自己多看多編才行。本來嘛,老師領進門,修行靠個人!

這一講就說這麼多,下去好好消化一下吧,這些東西並不是非常容易搞懂的,不過好在還有乙個周的時間來理解。

下一回我們講怎麼在場景中設定攝像機,接下去會是燈光、紋理、模型……

好啦,好啦,頭又要開始痛了,下回見。

]主頁:

郵件:[email protected]

soft於2002-7-22

返回

金點時空 2000/7/22

www.gpgame.net

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

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

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

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

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

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