繁体   English   中英

DirectX-以顶点数组为参数创建缓冲区

[英]DirectX - Creating buffer with vertices array as argument

今天,我开始使用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)
{
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

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

顶点缓冲区生成函数(确实起作用):

void StaticMesh::CreateBuffer(LPDIRECT3DDEVICE9 d3ddev)
{
    CUSTOMVERTEX vertices[3] = 
    {
        { 400.0f, 62.5f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), },
        { 650.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), },
        { 150.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), },
    };

    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

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

我看不出问题可能出在哪里。 感谢您的帮助,如果需要更多信息,请告知我。

函数的参数顶点

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)

是类型指针。 因此,函数内部的sizeof(Vertices)仅返回指针的大小,而不是您期望的整个数组的大小。

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

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM