Member 14131869 Ответов: 0

Проекция вида модели 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);
}


Что я уже пробовал:

все матрицы, которые подаются в шейдер, вычисляются правильно, как кажется, но я не совсем уверен в шейдере.

0 Ответов