3D空間におけるビジョン、世界、ビュー、プロジェクション、ワールド、ビュー、プロジェクションの役割と違い



Role Difference Vision



D3D11_VIEWPORT vp vp.Width = (FLOAT)m_bufferWidth vp.Height = (FLOAT)m_bufferHeight vp.MinDepth = 0.0f vp.MaxDepth = 1.0f vp.TopLeftX = 0 vp.TopLeftY = 0 m_context->RSSetViewports(1, &vp)

ビューポートは、RenderTargetのどの領域が最終的にレンダリングされるかを表します。

g_World = DirectX::XMMatrixIdentity() XMVECTOR Eye = XMVectorSet(0.0f, 0.0f, -4.8f, 0.0f) XMVECTOR At = XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f) XMVECTOR Up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f) g_View = DirectX::XMMatrixLookAtLH(Eye, At, Up) //g_Projection = DirectX::XMMatrixPerspectiveFovLH(XM_PIDIV4, (FLOAT)m_bufferWidth / (FLOAT)m_bufferHeight, 0.01f, 100.0f) g_Projection = DirectX::XMMatrixOrthographicLH(m_bufferWidth*0.005f, m_bufferHeight*0.005f, 0.01f, 100.0f)

世界は、現在の空間におけるオブジェクトの位置を表します
ビューは、目の観察ポイントの位置を表します
投影は、投影モードの変換を表します。ゲームエンジンを提供するには、通常2つの方法があります。投影の近距離と遠距離の間の距離によって、オブジェクトをカットする距離が決まります。通常最近0.01fに設定
1.パースペクティブコニカルクロッピング、3Dゲームが実行する必要のある射影変換方法。物体から観測点までの距離が長くなると、物体はどんどん小さくなっていきます。
2.正書法は長方形のトリミングです。 2Dゲームは通常、深度の影響を受けないこのカメラを使用します。 m_bufferWidth * 0.005f、乗数が小さいほど、カメラでの最終レンダリング。オブジェクトが大きいほど



CBMVP cbMVP cbMVP.mWorld = DirectX::XMMatrixTranspose(g_World) cbMVP.mView = DirectX::XMMatrixTranspose(g_View) cbMVP.mProjection = DirectX::XMMatrixTranspose(g_Projection) D3D11_BUFFER_DESC bd = {} bd.Usage = D3D11_USAGE_DEFAULT bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER bd.CPUAccessFlags = 0 bd.ByteWidth = sizeof(CBMVP) D3D11_SUBRESOURCE_DATA MVPData MVPData.pSysMem = &cbMVP MVPData.SysMemPitch = 0 MVPData.SysMemSlicePitch = 0 ID3D11Buffer* pMVP m_device->CreateBuffer(&bd, &MVPData, &pMVP)

通常、レンダリングされたすべてのオブジェクトのワールド、ビュー、プロジェクションを含むMVPを作成し、データをバッファーに格納します。バッファーの作成時にD3D11_SUBRESOURCE_DATA構造体アドレスを指定できます。また、nullptrを渡してから、UpdateSubresourceデータの変更を行うこともできます。

g_World = DirectX::XMMatrixRotationZ(DG2RAD(-90)) g_World *= DirectX::XMMatrixTranslation(0.0f, 1.0f, -0.0f) CBMVP cbMVP cbMVP.mWorld = DirectX::XMMatrixTranspose(g_World) cbMVP.mView = DirectX::XMMatrixTranspose(g_View) cbMVP.mProjection = DirectX::XMMatrixTranspose(g_Projection) m_context->UpdateSubresource(g_pMVP, 0, nullptr, &cbMVP, 0, 0)