::金點時空::
第四回:頂點渲染這個週末有朋友過來成都玩,一群人去春熙路的紅帽象玩跳舞機,好久沒有運動,累得沒力氣,導致本週的文章沒有在週末完成。不過還好,睡了一覺後精神又恢復了,以後一定要加強鍛鍊。金點時空 2000/7/22這一回我們來說說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程式設計逐漸有些頭緒了?這樣的話我的目的也就達到了,不過千萬不要以為就這麼簡單,麻煩的東西多著呢,還是要靠自己多看多編才行。本來嘛,老師領進門,修行靠個人!
這一講就說這麼多,下去好好消化一下吧,這些東西並不是非常容易搞懂的,不過好在還有乙個周的時間來理解。
下一回我們講怎麼在場景中設定攝像機,接下去會是燈光、紋理、模型……
好啦,好啦,頭又要開始痛了,下回見。
]主頁:
soft於2002-7-22
返回
www.gpgame.net
3D遊戲從頭編 第八回 紋理
第八回 紋理人們總是容易忽略身邊的一些事情,越是熟悉 越是親密就越會發生,為什麼呢?我也不知道,不過既然已經發生了,也就沒有必要再去埋怨什麼。立刻採取實際的行動,那才是我們唯一應該做的事情!什麼是紋理?紋理就是我們通常說的貼圖 又叫蒙皮 其原理就是在 的模型上面覆蓋上 的,讓我們的 模型顯得更真實。...
3D遊戲從頭編 第七回 燈光
金點時空 第七回 燈光可能秋天就要到了,最近天氣總是突冷忽熱的,一不小心就要著涼。雖然我已經很注意了,但還是沒能逃過這一劫,幸好吃藥吃的及時 到位,再加上 的悉心照料,終於是挺了過來。再說點題外話,就在前幾天,金點時空的網域名稱 www.gpgame.com 註冊一年到期了,我們正在進行續費,但是目...
3D遊戲從頭編 第二回 3D基本概念
金點時空 第二回 3d基本概念上一回我們建立起了 的程式設計環境,但是不要著急開始編碼,我們還是先來看看 中的一些基本概念,這些東西都是 程式設計基礎中的基礎,一定要牢記。用過3dmax的人都知道,乙個 場景是由很多模型 model 組成的,而模型就是通常說的網格 mesh 它是由三角形面 組成,而...