Điều này phần nào được liên kết với một câu hỏi mà tôi đã hỏi trước đây liên quan đến bản vẽ của các nguyên thủy được lập chỉ mục .
Vấn đề của tôi là tôi chỉ vẽ một khối khi tôi muốn vẽ nhiều hình. Tôi được cho biết rằng vấn đề là tôi đã ghi đè lên bộ đệm đỉnh và chỉ mục với mỗi lần khởi tạo mới Cube
và thay vào đó tôi nên tạo một cái ở gốc và sau đó vẽ nhiều, chuyển qua ma trận biến đổi sang shader khiến nó xuất hiện khác nhau nơi. Điều này làm việc rất đẹp.
Bây giờ tôi có một vấn đề mới: làm thế nào tôi có thể vẽ nhiều loại nguyên thủy khác nhau?
Đây là mã của tôi từ câu hỏi trước:
Cube::Cube(D3DXCOLOR colour, D3DXVECTOR3 min, D3DXVECTOR3 max)
{
// create eight vertices to represent the corners of the cube
VERTEX OurVertices[] =
{
{D3DXVECTOR3(min.x, max.y, max.z), colour},
{D3DXVECTOR3(min.x, max.y, min.z), colour},
{D3DXVECTOR3(min.x, min.y, max.z), colour},
{min, colour},
{max, colour},
{D3DXVECTOR3(max.x, max.y, min.z), colour},
{D3DXVECTOR3(max.x, min.y, max.z), colour},
{D3DXVECTOR3(max.x, min.y, min.z), colour},
};
// create the vertex buffer
D3D10_BUFFER_DESC bd;
bd.Usage = D3D10_USAGE_DYNAMIC;
bd.ByteWidth = sizeof(VERTEX) * 8;
bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE;
bd.MiscFlags = 0;
device->CreateBuffer(&bd, NULL, &pBuffer);
void* pVoid; // the void pointer
pBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, &pVoid); // map the vertex buffer
memcpy(pVoid, OurVertices, sizeof(OurVertices)); // copy the vertices to the buffer
pBuffer->Unmap();
// create the index buffer out of DWORDs
DWORD OurIndices[] =
{
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,
};
// create the index buffer
// D3D10_BUFFER_DESC bd; // redefinition
bd.Usage = D3D10_USAGE_DYNAMIC;
bd.ByteWidth = sizeof(DWORD) * 36;
bd.BindFlags = D3D10_BIND_INDEX_BUFFER;
bd.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE;
bd.MiscFlags = 0;
device->CreateBuffer(&bd, NULL, &iBuffer);
iBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, &pVoid); // map the index buffer
memcpy(pVoid, OurIndices, sizeof(OurIndices)); // copy the indices to the buffer
iBuffer->Unmap();
//this is simply a single call to the update method that sets up the scale, rotation
//and translation matrices, in case the cubes are static and you don't want to have to
//call update every frame
Update(D3DXVECTOR3(1, 1, 1), D3DXVECTOR3(0, 0, 0), D3DXVECTOR3(0, 0, 0));
}
Rõ ràng nếu tôi sao chép và sửa đổi mã thành một đối tượng hoặc hình dạng khác, hình dạng cuối cùng được khởi tạo sẽ ghi đè lên bộ đệm đỉnh, phải không?
Tôi có sử dụng nhiều bộ đệm đỉnh không? Tôi có nối thêm bộ đệm đỉnh mới vào cái cũ và sử dụng các chỉ số thích hợp để vẽ chúng không? Tôi có thể làm được không? Cả hai?