Проекция вида модели Directx 11 не работает
Я пытаюсь визуализировать куб на c++ с помощью DirectX 11. Мне удалось визуализировать его, однако я не в состоянии преобразовать модель в мировое положение с перспективной проекцией. Я следовал учебнику MSDN для этого
Вот этот код :
{ DirectX::XMMATRIX g_World; DirectX::XMMATRIX g_View; DirectX::XMMATRIX g_Projection; //D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(ConstantBuffer); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; Device->CreateBuffer(&bd, NULL, &pConstantBuffer); // Initialize the world matrix g_World = DirectX::XMMatrixIdentity(); // Initialize the view matrix DirectX::XMVECTOR Eye = DirectX::XMVectorSet(0.0f, 1.0f, -5.0f, 0.0f); DirectX::XMVECTOR At = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); DirectX::XMVECTOR Up = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); g_View = DirectX::XMMatrixLookAtLH(Eye, At, Up); // Initialize the projection matrix g_Projection = DirectX::XMMatrixPerspectiveFovLH(1.570796327f, winWidth / (FLOAT)winHeight, 0.01f, 100.0f); //Update variables ConstantBuffer cb; cb.mWorld = XMMatrixTranspose(g_World); cb.mView = XMMatrixTranspose(g_View); cb.mProjection = XMMatrixTranspose(g_Projection); DeviceContext->UpdateSubresource(pConstantBuffer, 0, NULL, &cb, 0, 0); }
а вот и код шейдера HLSL :
cbuffer ConstantBuffer : register(b0) { matrix World; matrix View; matrix Projection; } //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // VERTEX SHADER //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- float4 VShader(float4 position : POSITION) : SV_POSITION { position = mul(position, World); position = mul(position, View); position = mul(position, Projection); return position; } //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //PIXEL SHADER //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- float4 PShader(float4 position : SV_POSITION) : SV_TARGET { return float4(1.f, 0.f, 0.f, 1.f); }
Что я уже пробовал:
все матрицы, которые подаются в шейдер, вычисляются правильно, как кажется, но я не совсем уверен в шейдере.