나는 D3D11로 게임 프로그래밍의 기초에 관한 책을 읽었습니다. 이제 Direct3D의 기본적인 기본 내용을 이해합니다.Direct3D11 (C++) : 렌더링 (기본) 질문
하지만 ... 질문이 있습니다. 이 책에서 나는 항상 한 번에 하나의 데모를 만들어야했습니다. 이제 2D 게임을 만들려고합니다. 나쁜 습관에 익숙해지기를 원치 않으므로 조언이 필요합니다.
이 책에서는 항상 (구조체와 위치 멤버가있는 VertexPos 구조체) OR (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