作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 DirectX 的新手,我正在尝试使用 D3DPT_TRIANGLESTRIP
在一个场景中绘制两个矩形。一个矩形没问题,但两个矩形是完全不同的球类游戏。是的,我可以使用用 D3DPT_TRIANGLELIST
基元类型绘制的四个三角形来绘制它们。我的好奇心在于使用 D3DPT_TRIANGLESTRIP
所涉及的技术。我使用 D3DPT_TRIANGLESTRIP
为一个 Rectangle 使用的部分代码如下:
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
两次。
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 );
关于c++ - 如何使用 D3DPT_TRIANGLESTRIP 基元类型在 DirectX 中绘制两个分离的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1345179/
我是一名优秀的程序员,十分优秀!