我是Directx / 3D编程的初学者。我需要有关在Directx 11上实现硬件实例化的帮助。我试图在屏幕上渲染多个多维数据集,以创建某种Minecraft风格的体素引擎。问题是,我不知道从哪里开始实现这一目标。这是我的“渲染框架”功能的外观:
void RenderFrame(void)
{
D3DXMATRIX matView, matProjection;
D3DXMATRIX matFinal;
// create a view matrix
D3DXMatrixLookAtLH(&matView,
&D3DXVECTOR3(0.0f, 9.0f, 24.0f), // the camera position
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), // the look-at position
&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); // the up direction
// create a projection matrix
D3DXMatrixPerspectiveFovLH(&matProjection,
(FLOAT)D3DXToRadian(45), // field of view
(FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, // aspect ratio
1.0f, // near view-plane
100.0f); // far view-plane
// create the final transform
matFinal = matView * matProjection;
// clear the back buffer to a deep blue
devcon->ClearRenderTargetView(backbuffer, D3DXCOLOR(0.0f, 0.2f, 0.4f, 1.0f));
// clear the depth buffer
devcon->ClearDepthStencilView(zbuffer, D3D11_CLEAR_DEPTH, 1.0f, 0);
// select which vertex buffer to display
UINT stride = sizeof(VERTEX);
UINT offset = 0;
devcon->IASetVertexBuffers(0, 1, &pVBuffer, &stride, &offset);
devcon->IASetIndexBuffer(pIBuffer, DXGI_FORMAT_R32_UINT, 0);
// select which primtive type we are using
devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
// draw the Hypercraft
devcon->UpdateSubresource(pCBuffer, 0, 0, &matFinal, 0, 0);
devcon->DrawIndexed(24, 0, 0);
// switch the back buffer and the front buffer
swapchain->Present(0, 0);
}
请注意,这里有一个包含多维数据集顶点的顶点缓冲区,还有一个包含其索引的索引缓冲区。我想在一个绘制调用中一次在屏幕上渲染多个(5000+)多维数据集,而没有性能问题,所以我知道实例化是一种方法,但是我不知道如何在我的代码中实现它。为了显示多维数据集的多个实例,我需要对代码进行哪些更改?
提前谢谢!
答案 0 :(得分:0)
DX11中有一些步骤。但这是高级注释。
注意:如果需要对齐多维数据集,请为它们使用矩阵。您会在GPU端而不是CPU端获得续签罚款,这是它的使用寿命。但这是迄今为止最有效的呼叫方式。