C++ DirectX-使用顶点数组作为参数创建缓冲区

C++ DirectX-使用顶点数组作为参数创建缓冲区,c++,directx,vertex-buffer,vertex-array,C++,Directx,Vertex Buffer,Vertex Array,今天我开始使用DirectX(D3D9),一切都很顺利,直到我创建了一个静态网格类。此类包含用于生成缓冲区、绘制和释放缓冲区的方法 问题在于缓冲区生成功能。如果要将顶点数组作为参数传递给函数,则在绘制时不会绘制三角形(使用三角形进行测试),但是,如果顶点在函数中声明(与作为参数传递时的方式相同),则不会绘制三角形 顶点类: #define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) class CUSTOMVERTEX { public: flo

今天我开始使用DirectX(D3D9),一切都很顺利,直到我创建了一个静态网格类。此类包含用于生成缓冲区、绘制和释放缓冲区的方法

问题在于缓冲区生成功能。如果要将顶点数组作为参数传递给函数,则在绘制时不会绘制三角形(使用三角形进行测试),但是,如果顶点在函数中声明(与作为参数传递时的方式相同),则不会绘制三角形

顶点类:

#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
class CUSTOMVERTEX
{
public:
    float X, Y, Z, RHW;
    DWORD Color;
};
顶点缓冲区生成函数(不起作用):

顶点缓冲区生成函数(有效):


我看不出有什么问题。谢谢您的帮助,如果需要更多信息,请告诉我。

函数的参数顶点

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)
是一个类型指针。因此,函数中的sizeof(顶点)只返回指针的大小,而不是您期望的整个数组的大小

请将顶点数作为另一个参数传递给函数,并像这样修改函数

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], int aNumVertices, LPDIRECT3DDEVICE9 d3ddev)
{
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(aNumVertices*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

    Buffer->Lock(0, 0, (void**)&p, 0);
    memcpy(p, Vertices, aNumVertices * sizeof(CUSTOMVERTEX));
    Buffer->Unlock();
}

谢谢,我怎么不记得了。
void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)
void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], int aNumVertices, LPDIRECT3DDEVICE9 d3ddev)
{
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(aNumVertices*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

    Buffer->Lock(0, 0, (void**)&p, 0);
    memcpy(p, Vertices, aNumVertices * sizeof(CUSTOMVERTEX));
    Buffer->Unlock();
}