DirectX圖象中設備支持的原基類型-D3D入門
微軟D3D設備能創建和操縱下面初基類型:
l 點列表
l 線列表
l 線帶
l 三角形列表
l 三角形帶
l 三角形扇區
你能用IDirect3DDevice9接口中的任何粉刷方法在C++程序中粉刷原基。
1.1.1.1. 點列表
一個點列表是一個頂點的集合,這些頂點被作為單獨的點來粉刷。你的程序可以在3-D場景中用它們作為在多邊形表面上開始字段、點線。
下圖描述了一個粉刷后的點列表。
你的程序能在一個點列表上應用素材和紋理,素材或紋理的顏色僅僅出現在點上,而不是在點之間的任何地方。
下面的代碼顯示怎么樣為頂點創建點列表:
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
下面的例子展示了怎么樣使用IDirect3DDevice9::DrawPrimitive來粉刷一個點列表:
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 6 );
1.1.1.2. 線列表
一個線列表是一些獨立的直線段。線列表在3D場景中添加凍雨或大雨是非常有用。程序通過填充一個頂點數組來創建一個先列表,并且線列表中的頂點數量必須是偶數且大于或等于2。
下圖顯示了一個粉刷線列表:
你可以在線列表上應用素材和紋理,素材和紋理的顏色僅僅出現在線上,而不是線之間的任何點。
下面的代碼表明如何為線列表創建頂點。
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
下面的代碼展示了怎么樣使用IDirect3DDevice9::DrawPrimitive來粉刷一個線列表:
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive (D3DPT_LINELIST, 0, 3);
1.1.1.3. 線帶
線帶是由連接的線段組成的一種原基;你的程序可以使用線帶來創建不關閉的多邊形。一個關閉的多邊形是最后一個頂點通過線段連接到第一個頂點的多邊形。如果你的程序制作基于線帶的多邊形,頂點并不保證是共面的。
下圖顯示了一個粉刷過后的線帶:
下面代碼顯示了如何創建一個線帶的頂點:
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
下面代碼顯示了怎么樣使用IDirect3DDevice9::DrawPrimitive來粉刷這個線帶:
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_LINESTRIP, 0, 5 );
1.1.1.4. 三角形列表
三角形列表是一系列獨立的三角形。他們或許彼此相鄰,也可能不相鄰。一個三角形列表必須至少有三個頂點,總頂點數必須能被3整除。
使用三角形列表來創建由不相交的塊組成的對象,例如,在3D游戲中創建FORCE-FIELD墻就使用大量小的不相連的三角形,然后應用素材和紋理,看起來散發光到三角形列表;每個墻上的三角形看起來都發光,在墻后面的場景通過三角形之間的縫變的部分可見,就像一個玩家看到一個FORCE FIELD一樣。
三角形列表通常用來創建有明顯邊和帶有Gouraud陰影的原基,見Face和頂點法線向量。
下圖顯示一個著色之后的三角形列表:
下面的代碼顯示如何創建一個三角形列表的頂點:
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
下面的代碼顯示怎么樣使用IDirect3DDevice9::DrawPrimitive來對這個三角形列表進行著色:
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );
1.1.1.5. 三角形帶
三角形帶是一系列相互連接的三角形組成。因為三角形是相連的,程序不需要重復指定所有三角形的頂點;例如:你僅僅需要7個頂點來定義下面的三角形帶:
系統使用頂點v1,v2和v3來畫第一個三角形,v2,v4和v3來畫第二個三角形;v3,v4和v5來化第三個三角形,v4,v6和v5來畫第四個三角形等等。注意第二個三角形的頂點和第4個三角形的頂點是倒序的,這保證所有的三角形都以順時針的方向被畫出來。
3D場景中的大多數對象都是由三角形帶組成,這是因為三角形帶能用來以有效地使用內存和處理時間的方式指定復雜的對象。
下面的圖顯示一個著色后的三角形帶:
下面代碼說明怎么樣為這個三角形帶定義頂點集合:
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
下面的代碼展示了怎么樣使用IDirect3DDevice9::DrawPrimitive來為這個三角形著色:
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 4);
1.1.1.6. 三角形扇區
除了所有的三角都共享一個頂點之外,三角形扇和三角形帶相似。如下圖所示:
系統使用v2,v3和v1來畫第一個三角形,使用v3,v4和v1來畫第二個三角形,使用v4,v5和v1來畫第三個等等。當平面陰影有效的時候,系統從第一個三角形開始使用指定的顏色來陰影。
該圖描述了著色以后的三角形扇:
下面的代碼顯示怎么樣為這個三角形扇定義頂點集:
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{ 0.0, 0.0, 0.0},
{-5.0, 5.0, 0.0},
{-3.0, 7.0, 0.0},
{ 0.0, 10.0, 0.0},
{ 3.0, 7.0, 0.0},
{ 5.0, 5.0, 0.0},
};
下面的代碼顯示怎么樣使用IDirect3DDevice9::DrawPrimitive來為這個三角形扇著色:
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 4 );
posted on 2006-02-25 01:15 笨笨 閱讀(1380) 評論(1) 編輯 收藏 引用 所屬分類: DirectX3D