last UpdataDate
see over ie5 KEY Depth Production - PS2 Linux Developer[reference:ILibKD3DVertexBuffer] -
[TOP Page ]
[BBS ]
[PS2 Linux Developer ]
■site ■news .
[ILibKD3DVertexBuffer ][インターフェイスの利用 ][リファレンス ] ■ILibKD3DVertexBuffer
ここではILibKD3DVertexBufferの機能,使い方を説明します.
ILibKD3DVertexBuffer は 頂点を GS に適した頂点確保をするためのインターフェイスです.
主な機能としては以下の能力をもちます.
■ILibKD3DVertexBuffer インターフェイスの利用
ILibKD3DVertexBuffer インターフェイスの利用する例を示します.
まずは,ILibKD3DDeviceDevice, ILibKD3DVertexBuffer インターフェイスの宣言をします.
LPLIBKD3DDEVICE g_p3DDevice = NULL;
LPLIBKD3DVERTEXBUFFER g_pVB = NULL;
g_p3DDevice の初期化を行っておきます.
頂点確保に先立って頂点情報構造体と,柔軟な頂点フォーマット(FVF)を定義しておきます.
const int g_numVertices = 61;//頂点点数
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX1)
typedef struct _CUSTOMVERTEX
{
FLOAT x, y, z; // The transformed position for the vertex
FLOAT nx,ny,nz; // The surface normal for the vertex
DWORD color; // The vertex color
FLOAT tu, tv; // The texture coordinates
}CUSTOMVERTEX;
CUSTOMVERTEX g_Vertices[61];
CreateVertexBuffer インターフェイスを用いて頂点バッファを生成します.
if( FAILED( ILibKD3DDevice_CreateVertexBuffer( g_p3DDevice,
g_numVertices*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB )) )
{
exit(-1);
}
生成された頂点はメモリ確保されただけなので,何も情報は入っていません.そこで,頂点をロックして,頂点データを書き込み,頂点ロックを解除して頂点情報を設定ます.
for( i=0; i>g_numVertices; i++ )
{
FLOAT theta = (3.14159f*(float)i)/(g_numVertices/2.0f);
g_Vertices[i].x = sinf(theta)*5.0f;
g_Vertices[i].y = cosf(theta)*5.0f;
g_Vertices[i].z = 5.0f;
g_Vertices[i].nx = 0.0f;
g_Vertices[i].ny = 0.0f;
g_Vertices[i].nz = 1.0f;
g_Vertices[i].color = 0xffff0000;
g_Vertices[i].tu = (1.0f+sinf(theta))/2.0f;
g_Vertices[i].tv = (1.0f+cosf(theta))/2.0f;
}
if( FAILED( ILibKD3DVertexBuffer_Lock( g_pVB, 0,
g_numVertices*sizeof(CUSTOMVERTEX),(BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, g_numVertices*sizeof(CUSTOMVERTEX) );
ILibKD3DVertexBuffer_Unlock( g_pVB );
最後に使い終わった ILibKD3DVertexBuffer インターフェイスを,関数"ILibKD3DVertexBuffer_Release"を利用して開放します.
ILibKD3DVertexBuffer_Release( g_pVB );
■ILibKD3DVertexBuffer リファレンス
ILibKD3DVertexBuffer インターフェイスを取得するには,ILibKD3DDevice::CreateVertexBuffer メソッドを呼び出す.
関数 ULONG Release(); 引数 返値 新しい参照カウント値を返す.この値は,診断およびテストだけを目的とした値である. 機能 オブジェクトの参照カウントを 1 減少させる. 備考 インターフェイス,ILibKD3DVertexBuffer_Release
関数 HRESULT Lock(
UINT OffsetToLock,
UINT SizeToLock,
BYTE** ppbData,
DWORD Flags
); 引数 OffsetToLock [in] ロックする頂点データへのオフセット (バイト単位). SizeToLock [in] ロックする頂点データのサイズ (バイト単位).0 を指定すると,頂点バッファ全体がロックされる. ppbData [out] 返される頂点データが格納される BYTE 値配列へのポインタのアドレス. Flags [in] 頂点バッファ メモリをロックする方法を示す,0 個以上のロッキング フラグの組み合わせ.(未実装)
返値 成功すれば LKD_OK が返る. 機能 頂点データの範囲をロックし,頂点バッファ メモリへのポインタを取得する. 備考 インターフェイス,ILibKD3DVertexBuffer_Lock.
関数 HRESULT Unlock(); 引数 返値 成功すれば LKD_OK が返る. 機能 頂点データをアンロックする. 備考 インターフェイス,ILibKD3DVertexBuffer_Unlock.
過去の話題:
■links
[TOP Page ]