3、
线带列表
在D3D里还提供线带列表显示,这种显示方式是把所有直线顺着顶点连接显示出来。如下图所示:
采用线带列表显示的方式,可以减少顶点占用内存空间,提高显示效率。下面这段代码就是显示6个顶点的直线。
m_nLineStripCount = 3;
HRESULT hr;
// 创建顶点缓冲区。
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer(
m_nLineStripCount*2 * sizeof(VT_CAIPRIMITIVE),
0, VT_CAIPRIMITIVE::dwFVF,
D3DPOOL_MANAGED, &pVB, NULL ) ) )
{
//创建顶点缓冲区失败。
return DXTRACE_ERR( "CreateVertexBuffer", hr );
}
//
VT_CAIPRIMITIVE* pVertices;
if( FAILED( hr = pVB->Lock( 0, 0, (VOID**)&pVertices, 0 ) ) )
{
//锁住顶点缓冲区。
return DXTRACE_ERR( "Lock", hr );
}
pVertices[0].vPosition = D3DXVECTOR3( -6.0f, -2.0f, 2.0f );
pVertices[0].crDiffuse = D3DCOLOR_COLORVALUE( 1.0, 0.0, 0.0, 1.0 );
pVertices[1].vPosition = D3DXVECTOR3( -4.0f, 2.0f, 2.0f );
pVertices[1].crDiffuse = D3DCOLOR_COLORVALUE( 1.0, 0.0, 0.0, 1.0 );
//
pVertices[2].vPosition = D3DXVECTOR3( -2.0f, -2.0f, 2.0f );
pVertices[2].crDiffuse = D3DCOLOR_COLORVALUE( 0.0, 1.0, 0.0, 1.0 );
pVertices[3].vPosition = D3DXVECTOR3( 0.0f, 2.0f, 0.0f );
pVertices[3].crDiffuse = D3DCOLOR_COLORVALUE( 0.0, 1.0, 0.0, 1.0 );
//
pVertices[4].vPosition = D3DXVECTOR3( 2.0f, -2.0f, 2.0f );
pVertices[4].crDiffuse = D3DCOLOR_COLORVALUE( 0.0, 0.0, 1.0, 1.0 );
pVertices[5].vPosition = D3DXVECTOR3( 4.0f, 2.0f, 2.0f );
pVertices[5].crDiffuse = D3DCOLOR_COLORVALUE( 0.0, 0.0, 1.0, 1.0 );
//解锁顶点缓冲区。
pVB->Unlock();
上面的代码是先创建合适的顶点缓冲区,然后设置6个顶点的值。由这6个顶点就可以连接成为5条直线。显示的代码如下:
m_pd3dDevice->SetStreamSource( 0, m_pvbLineStrip, 0, sizeof(VT_CAIPRIMITIVE) );
m_pd3dDevice->SetFVF( VT_CAIPRIMITIVE::dwFVF );
m_pd3dDevice->DrawPrimitive( D3DPT_LINESTRIP, 0, m_nLineStripCount*2 -1 );
上面的DrawPrimitive函数设置为D3DPT_LINESTRIP显示,就是线带方式显示。最后一个参数指明了它要显示多少条直线。
本电子书、
MM3D
引擎源程序
、例子源程序共
49
元一套
联系人:蔡军生
联系方式:
QQ: 9073204
EMAIL: caimouse1976 at sina.com