http://blog.csdn.net/loveclover

第二步:设置顶点缓冲

既然已经定义了顶点格式,接下来就要初始化顶点。Vertices示例工程在创建了Direct3D对象之后,调用自定义函数InitVB来完成这件工作。下面初始化三个自定义顶点,并赋值给它们:

CUSTOMVERTEX vertices[] =
{
    
150.0f,  50.0f0.5f1.0f0xffff0000, }// x, y, z, rhw, color
    250.0f250.0f0.5f1.0f0xff00ff00, },
    
{  50.0f250.0f0.5f1.0f0xff00ffff, },
}
;

上面的代码将所有顶点值填充为一个三角形,并且指定了每个顶点发光的颜色。第一个顶点位于150,50并发出红光,第二个顶点位于250,250并发出绿光,第三个顶点位于50,250并发出蓝绿光。每个顶点都有0.5的深度值,和1.0的RHW值。

下一步是要调用IDirect3DDevice9::CreateVertexBuffer来创建一个顶点缓冲,如下所示:

if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
         
0 /* Usage */, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB ) ) )
    
return E_FAIL;

前两个参数是告知Direct3D新顶点缓冲的大小和用途。之后的两个参数指定了新缓冲的向量格式和存储区域。这里向量格式是D3DFVF_CUSTOMVERTEX,这也是前面的示例代码中创建的灵活顶点格式(FVF)。D3DPOOL_DEFAULT标志表明在一个最合适的存储区域里面创建这个缓冲。最后一个参数是将要创建的顶点缓冲的地址。

创建了顶点缓冲之后,经过如下操作就可以将顶点数据填充进去。

VOID* pVertices;
if( FAILED( g_pVB->Lock( 0sizeof(vertices), (void**)&pVertices, 0 ) ) )
    
return E_FAIL;
memcpy( pVertices, g_Vertices, 
sizeof(vertices) );
g_pVB
->Unlock();

首先调用IDirect3DVertexBuffer9::Lock锁定顶点缓冲。第一个参数是待锁定数据区域的偏移量(按字节)。第二个参数是待锁定顶点数据的大小(以字节为单位)。第三个参数是一个字节型指针的地址,其内容是指向顶点数据的指针。第四个参数告诉顶点缓冲怎样锁定数据。

通过调用memcpy,顶点就被拷贝到顶点缓冲当中。做完memcpy之后,就需要调用IDirect3DVertexBuffer9::Unlock来对顶点缓冲进行解锁。之所以需要这种锁定和解锁的机制是因为,顶点缓冲可能位于设备内存当中。

现在顶点数据已经位于顶点缓冲当中,下面到了渲染显示的时候了。详见第三步:渲染并显示。

posted on 2008-03-12 18:20 Sure 阅读(468) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
<2023年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(5)

随笔分类

随笔档案

相册

搜索

最新评论

阅读排行榜

评论排行榜