我一直在关注一本关于使用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