如何使用 D3DPT_TRIANGLESTRIP 基元类型在 DirectX 中绘制两个分离的矩形

2024-01-07

我是 DirectX 新手,我正在尝试使用以下命令在一个场景中绘制两个矩形D3DPT_TRIANGLESTRIP。一个矩形没问题,但两个矩形则完全不同。是的,我可以使用用 绘制的四个三角形来绘制它们D3DPT_TRIANGLELIST原始类型。我的好奇心在于使用所涉及的技术D3DPT_TRIANGLESTRIP。 我用于一个矩形的部分代码使用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?还有一种可能的方法来复制和转换当前矩形吗?


将第二个矩形的四个顶点添加到顶点缓冲区,然后调用DrawPrimitive twice.

g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 4, 2 );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 D3DPT_TRIANGLESTRIP 基元类型在 DirectX 中绘制两个分离的矩形 的相关文章

随机推荐