抱歉,如果我不够具体,我是DirectX编程和Stack Overflow的新手。
问题在于,当我在DirectX9中渲染3D对象时,我必须手动添加“顶点缓冲区”和“索引缓冲区”(用手绘制立方体)。我正在尝试重建一个像《我的世界》这样的世界,但不知道我会怎么做。
我已经尝试过使用“ for循环”,但这只会使整个屏幕出现故障。我也尝试过使用向量,但是我只是感到困惑而没有得到任何结果。
这是我的代码。如您所见,这就是我绘制2个多维数据集的方式。我想知道是否还有另一种更有效的方法,因为我想一次绘制数百个立方体。
void DirectXClass::init_graphics(void)
{
// create the vertices using the CUSTOMVERTEX struct
CUSTOMVERTEX vertices[] =
{
// Square 1
{ 3.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ -3.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ 3.0f, -3.0f, -3.0f, D3DCOLOR_XRGB(255, 0, 0), },
{ -3.0f, -3.0f, -3.0f, D3DCOLOR_XRGB(0, 255, 255), },
{ 3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ -3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(255, 0, 0), },
{ 3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ -3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 255), },
{ -3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ 3.0f, 3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ -3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(255, 0, 0), },
{ 3.0f, -3.0f, 3.0f, D3DCOLOR_XRGB(0, 255, 255), },
{ -3.0f, 3.0f, 9.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ 3.0f, 3.0f, 9.0f, D3DCOLOR_XRGB(255, 0, 0), },
{ -3.0f, -3.0f, 9.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ 3.0f, -3.0f, 9.0f, D3DCOLOR_XRGB(0, 255, 255), },
};
// create a vertex buffer interface called v_buffer
// d3ddev->CreateVertexBuffer(sizeof(vertices) / sizeof(vertices[0]) * sizeof(CUSTOMVERTEX),
d3ddev->CreateVertexBuffer(sizeof(vertices) / sizeof(vertices[0]) * sizeof(CUSTOMVERTEX),
0,
CUSTOMFVF,
D3DPOOL_MANAGED,
&v_buffer,
NULL);
VOID** pVoid;
// lock v_buffer and load the vertices into it
v_buffer->Lock(0, 0, (void**)& pVoid, 0);
memcpy(pVoid, vertices, sizeof(vertices));
v_buffer->Unlock();
short indices[] =
{
0, 1, 2, // side 1
2, 1, 3,
4, 0, 6, // side 2
6, 0, 2,
7, 5, 6, // side 3
6, 5, 4,
3, 1, 7, // side 4
7, 1, 5,
4, 5, 0, // side 5
0, 5, 1,
3, 7, 2, // side 6
2, 7, 6,
8, 9, 10, // side 9
10, 9, 11,
12, 8, 14, // side 10
14, 8, 10,
15, 13, 14, // side 11
14, 13, 12,
11, 9, 15, // side 12
15, 9, 13,
12, 13, 8, // side 13
8, 13, 9,
11, 15, 10, // side 14
10, 15, 14,
};
// create a vertex buffer interface called v_buffer
// d3ddev->CreateIndexBuffer(sizeof(indices) / sizeof(indices[0]) * sizeof(short),
d3ddev->CreateIndexBuffer(sizeof(indices) / sizeof(indices[0]) * sizeof(short),
0,
D3DFMT_INDEX16,
D3DPOOL_MANAGED,
&i_buffer,
NULL);
// lock v_buffer and load the vertices into it
i_buffer->Lock(0, 0, (void**)& pVoid, 0);
memcpy(pVoid, indices, sizeof(indices));
i_buffer->Unlock();
}