我是 DirectX 的新手,我正在尝试在一个场景中使用D3DPT_TRIANGLESTRIP
. 一个矩形没问题,但两个矩形是完全不同的球类游戏。D3DPT_TRIANGLELIST
是的,我可以使用原始类型绘制的四个三角形来绘制它们。我的好奇心在于使用D3DPT_TRIANGLESTRIP
. 我用于一个 Rectangle 的部分代码D3DPT_TRIANGLESTRIP
如下:
CUSTOMVERTEX recVertex[] = {
{ 10.0f, 10.0f, 0.10f, 1.0f, 0xffffffff, }, // x, y, z, rhw, color
{ 220.0f, 10.0f, 0.10f, 1.0f, 0xffffffff, },
{ 10.0f, 440.0f, 0.10f, 1.0f, 0xffffffff, },
{ 220.0f, 440.0f, 0.10f, 1.0f, 0xffffffff, },
};
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4 * sizeof( CUSTOMVERTEX ),
0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}
更重要的代码...
VOID* precVertex;
if( FAILED( g_pVB->Lock( 0, sizeof( recVertex ), ( void** )&pGameField, 0 ) ) )
{
return E_FAIL;
}
memcpy( precVertex, recVertex, sizeof( recVertex ) );
然后像这样渲染...
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
基于这个模型,我可以轻松地复制代码更改自定义顶点上的 x 和 y 值并创建另一个顶点缓冲区,它会工作。
就我个人而言,我觉得这不是最好的方法,特别是考虑到我必须绘制 100 个矩形或类似的东西的情况。问题是,我没有其他想法。所以我的问题是,用 绘制两个矩形的最有效方法是什么D3DPT_TRIANGLESTRIP
?还有一种复制和转换当前矩形的可能方法吗?