d3d中,为什么这个三角形就是画不出来呢?郁闷

sprawd 2009-07-10 12:57:48

//顶点声明
OnD3D9CreateDevice()
{
....
D3DVERTEXELEMENT9 decl[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
D3DDECL_END()
};

V_RETURN( pd3dDevice->CreateVertexDeclaration( decl, &g_pVertexDeclaration ) );
..
}
//顶点结构
OnD3D9ResetDevice()
{
......
// Setup render states
pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

// Create and initialize vertex buffer测试,用最简单的三角形
V_RETURN( pd3dDevice->CreateVertexBuffer( 3 * sizeof( D3DXVECTOR2 ),
0, 0,
D3DPOOL_DEFAULT, &g_pVB, NULL ) );

D3DXVECTOR2* pVertices;
V_RETURN( g_pVB->Lock( 0, 0, ( void** )&pVertices, 0 ) );

for( WORD i =0; i<3; i++)
{
*pVertices++= D3DXVECTOR2( 200*sinf( i*D3DX_PI/4.0)+300, 200*cosf( i*D3DX_PI/4.0)+250);
}

V_RETURN( hr = g_pVB->Unlock() );

//Create and initialize index buffer

WORD* pIndices;
V_RETURN( pd3dDevice->CreateIndexBuffer( 3 * sizeof( WORD ),
0, D3DFMT_INDEX16,
D3DPOOL_DEFAULT, &g_pIB, NULL ) );


V_RETURN( g_pIB->Lock( 0, 0, ( void** )&pIndices, 0 ) );

pIndices[0] = ( WORD )( 0 );
pIndices[1] = ( WORD )( 1 );
pIndices[2] = ( WORD )( 2 );

V_RETURN( g_pIB->Unlock() );
......
}
//画三角形
OnD3D9FrameRender()
{
..
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{

pd3dDevice->SetVertexDeclaration( g_pVertexDeclaration );
pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( D3DXVECTOR2 ) );
pd3dDevice->SetIndices( g_pIB );
V( pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, 3,
0, 1 ) );
..
}


我怎么看都找不到问题啊,问什么一运行就说D3DERE_INVALIDCAL(0x887686c)
Calling:pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, 3, 0, 1 )

如果不用索引模式,就没事,为什么呢?请求帮助
...全文
42 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yayafu 2009-07-10
  • 打赏
  • 举报
回复
看看哈
leechrockgames 2009-07-10
  • 打赏
  • 举报
回复
index是4个点确定2个三角形.
// Create and initialize vertex buffer测试,用最简单的三角形
V_RETURN( pd3dDevice->CreateVertexBuffer( 3 * sizeof( D3DXVECTOR2 ),
0, 0,
D3DPOOL_DEFAULT, &g_pVB, NULL ) );
设置4点试试.
sprawd 2009-07-10
  • 打赏
  • 举报
回复
我用的是定点声明,没用FVF,不是这里的问题
oysoft 2009-07-10
  • 打赏
  • 举报
回复
没有pd3dDevice->SetFVF()啊
sprawd 2009-07-10
  • 打赏
  • 举报
回复
找到原因了,特此记录下:
在顶点声明里
{ 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
如果用D3DDECLTYPE_FLOAT2,则必须在vertex shader中重写为FLOAT3
否则必须用D3DDECLTYPE_FLOAT3这个参数。
对于固定流水线来说,好像不认FLOAT2的。
这个错误是通过PIX查到的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧