|
|

楼主 |
发表于 2006-8-9 11:02:00
|
显示全部楼层
Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?
呵呵,多谢各位来回答
我来简化一下问题,就使用 sdk 中的最简单的绘制三角形的例子
我在标准的绘制三角形的部分,添加了一些绘制另一个三角形的标准代码 [代码见后面]
这样就会导致每次绘制,只有是我后面添加的那个三角形显示了出来,而原来的三角形没有显示出来 [这个例子够简单了,不太可能是相机呀,视角的问题了。。]
我就是想知道,这种 LOCK memcpy UNLock 的模式是不是不能连续使用呢?
[我的意思是,一个 LPDIRECT3DVERTEXBUFFER9 连续用于不同的图形]
其实我对这种模式不是很了解,一直就是用而已,想借这个机会学习一下 ^_^
[奇怪的是,我原来的一个程序就是这么连续用的,也能用 @_@]
指点一下吧,谢谢!
以下是代码:
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
// test
// 尝试使用同一个顶点缓存绘制多个三角形
CUSTOMVERTEX vertices[] =
{
{ 75.0f, 25.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 125.0f, 125.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 25.0f, 125.0f, 0.5f, 1.0f, 0xff00ffff, },
};
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return ;
}
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return ;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
// test end
g_pd3dDevice->EndScene();
}
g_pd3dDevice-> resent( NULL, NULL, NULL, NULL ); |
|