今天我开始使用 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();
}
我看不出有什么问题。感谢您的帮助,如果需要更多信息,请告诉我。