我一直在關注一本關於使用D3D11進行遊戲編程的基礎知識的書。我現在瞭解Direct3D的絕對基礎知識:)Direct3D11(C++):渲染(基本)問題
但是...我有一個問題。在書中,我總是不得不一次做一個演示。現在,我正在試圖製作一款2D遊戲。由於我不想習慣壞習慣,所以我需要你的建議。在書中,我總是必須定義一個(帶有texcoord和位置成員的結構VertexPos)或(僅帶有XMFLOAT3位置成員的結構VertexPos)。在我製作的遊戲中,我希望能夠繪製沒有紋理和表面紋理的實體曲面。我不知道如何做到這一點,更不用說高效地做到這一點。
這裏是我的渲染功能:
void GameSpriteDemo::Render()
{
if (m_pD3DContext == 0)
{return;}
float ClearColor[4] = {0.0f, 0.0f, 0.25f, 1.0f};
m_pD3DContext->ClearRenderTargetView(m_pBackBufferTarget,ClearColor);
UINT stride = sizeof(VertexPos);
UINT offset = 0;
m_pD3DContext->IASetInputLayout(m_pInputLayout);
m_pD3DContext->IASetVertexBuffers(0,1,&m_pVertexBuffer, &stride, &offset);
m_pD3DContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_pD3DContext->VSSetShader(m_pSolidColorVS,0,0);
m_pD3DContext->PSSetShader(m_pSolidColorPS,0,0);
m_pD3DContext->PSSetShaderResources(0,1,&m_pColorMap);
m_pD3DContext->PSSetSamplers(0,1,&m_pColorMapSampler);
for(int i=0; i < 2; ++i)
{
XMMATRIX world = m_Sprites[i].GetWorldMatrix();
XMMATRIX mvp = XMMatrixMultiply(world, m_VpMatrix);
mvp = XMMatrixTranspose(mvp);
m_pD3DContext->UpdateSubresource(m_pMvpCB,0,0,&mvp,0,0);
m_pD3DContext->VSSetConstantBuffers(0,1,&m_pMvpCB);
m_pD3DContext->Draw(6,0);
}
m_pSwapChain->Present(0,0);
}
那麼,應該如何有效地我與多個頂點緩衝區,輸入的佈局,着色器,攪拌機等處理呢?
我應該只是創建這些的多個版本,然後在繪製調用後設置重置輸入裝配,着色器等?或者這不起作用/這是不是有效?
謝謝:)
如何使用框架? – Dani
我想學習如何從開始做到這一點...會教我很多 – xcrypt