当顶点这样定义的时候:
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;
由于对指针的理解不是很明白,请教下这样的话对应的那两个函数该怎么写啊?在线等,谢谢了。

解决方案 »

  1.   

    sizeof(vertices)
    两个这个改成sizeof(CUSTOMVERTIES )就可以了
      

  2.   

    sizeof(vertices)和sizeof(CUSTOMVERTIES )这两个应该是顶点数目的倍数关系吧,可以这样吗?
    还有这个参数该怎么改呢memcpy(pVertices,vertices,sizeof(vertices))?
      

  3.   

    CUSTOMVERTIES* pVertices ; if(FAILED(g_pVB->Lock(0,0,(void**)&pVertices,0)))
    {
    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的拷贝函数,自己写循环。