当顶点这样定义的时候:
CUSTOMVERTIES vertices[]=
{
{ -1, 1, 1 ,0xffff0000 },
{ 1, 1, 1 , 0xff00ff00 },
{ 1, 1, -1 , 0xff0000ff },
{ -1, 1, -1 , 0xffffff00}, { -1, -1, 1 , 0xff00ffff },
{ 1, -1, 1 , 0xffff00ff },
{ 1, -1, -1 , 0xff000000 },
{ -1, -1, -1 , 0xffffffff },
};
创建顶点缓冲区:
if(FAILED(g_pd3dmDevice->CreateVertexBuffer(sizeof(vertices),0,D3DFVF_CUSTOMVERTEX,pool,&g_pVB)))
{
::AfxMessageBox(L"CreateVertexBuffer fail");
return E_FAIL;
}
然后拷贝到缓冲区
CUSTOMVERTIES* pVertices ; if(FAILED(g_pVB->Lock(0,0,(void**)&pVertices,0)))
{
return E_FAIL;
}
memcpy(pVertices,vertices,sizeof(vertices));
g_pVB->Unlock();
==========================================================================================================
以上为书上的例子
但是现在我的顶点数组必须这样定义:
CUSTOMVERTIES *vertices = new CUSTOMVERTIES[8];
vertices[0].x=-1.0f;
vertices[0].y=1.0f;
vertices[0].z=1.0f;
vertices[0].color=0xffff0000; vertices[1].x=1.0f;
vertices[1].y=1.0f;
vertices[1].z=1.0f;
vertices[1].color=0xffff0000; vertices[2].x=1.0f;
vertices[2].y=1.0f;
vertices[2].z=-1.0f;
vertices[2].color=0xffff0000; vertices[3].x=-1.0f;
vertices[3].y=1.0f;
vertices[3].z=-1.0f;
vertices[3].color=0xffff0000;
vertices[4].x=-1.0f;
vertices[4].y=-1.0f;
vertices[4].z=1.0f;
vertices[4].color=0xffff0000; vertices[5].x=1.0f;
vertices[5].y=-1.0f;
vertices[5].z=1.0f;
vertices[5].color=0xffff0000; vertices[6].x=1.0f;
vertices[6].y=-1.0f;
vertices[6].z=-1.0f;
vertices[6].color=0xffff0000; vertices[7].x=-1.0f;
vertices[7].y=-1.0f;
vertices[7].z=-1.0f;
vertices[7].color=0xffff0000;
由于对指针的理解不是很明白,请教下这样的话对应的那两个函数该怎么写啊?在线等,谢谢了。
CUSTOMVERTIES vertices[]=
{
{ -1, 1, 1 ,0xffff0000 },
{ 1, 1, 1 , 0xff00ff00 },
{ 1, 1, -1 , 0xff0000ff },
{ -1, 1, -1 , 0xffffff00}, { -1, -1, 1 , 0xff00ffff },
{ 1, -1, 1 , 0xffff00ff },
{ 1, -1, -1 , 0xff000000 },
{ -1, -1, -1 , 0xffffffff },
};
创建顶点缓冲区:
if(FAILED(g_pd3dmDevice->CreateVertexBuffer(sizeof(vertices),0,D3DFVF_CUSTOMVERTEX,pool,&g_pVB)))
{
::AfxMessageBox(L"CreateVertexBuffer fail");
return E_FAIL;
}
然后拷贝到缓冲区
CUSTOMVERTIES* pVertices ; if(FAILED(g_pVB->Lock(0,0,(void**)&pVertices,0)))
{
return E_FAIL;
}
memcpy(pVertices,vertices,sizeof(vertices));
g_pVB->Unlock();
==========================================================================================================
以上为书上的例子
但是现在我的顶点数组必须这样定义:
CUSTOMVERTIES *vertices = new CUSTOMVERTIES[8];
vertices[0].x=-1.0f;
vertices[0].y=1.0f;
vertices[0].z=1.0f;
vertices[0].color=0xffff0000; vertices[1].x=1.0f;
vertices[1].y=1.0f;
vertices[1].z=1.0f;
vertices[1].color=0xffff0000; vertices[2].x=1.0f;
vertices[2].y=1.0f;
vertices[2].z=-1.0f;
vertices[2].color=0xffff0000; vertices[3].x=-1.0f;
vertices[3].y=1.0f;
vertices[3].z=-1.0f;
vertices[3].color=0xffff0000;
vertices[4].x=-1.0f;
vertices[4].y=-1.0f;
vertices[4].z=1.0f;
vertices[4].color=0xffff0000; vertices[5].x=1.0f;
vertices[5].y=-1.0f;
vertices[5].z=1.0f;
vertices[5].color=0xffff0000; vertices[6].x=1.0f;
vertices[6].y=-1.0f;
vertices[6].z=-1.0f;
vertices[6].color=0xffff0000; vertices[7].x=-1.0f;
vertices[7].y=-1.0f;
vertices[7].z=-1.0f;
vertices[7].color=0xffff0000;
由于对指针的理解不是很明白,请教下这样的话对应的那两个函数该怎么写啊?在线等,谢谢了。
两个这个改成sizeof(CUSTOMVERTIES )就可以了
还有这个参数该怎么改呢memcpy(pVertices,vertices,sizeof(vertices))?
{
return E_FAIL;
}
//memcpy(pVertices,vertices,sizeof(*vertices));
for(int i=0;i<24;i++)
{
pVertices[i].x=vertices[i].x;
pVertices[i].y=vertices[i].y;
pVertices[i].z=vertices[i].z;
pVertices[i].color=vertices[i].color;
}
g_pVB->Unlock();问题已解决,可以不用API的拷贝函数,自己写循环。