Я пытаюсь отобразить 3D-куб с помощью DirectX. Я создал приложение x64 c ++ windows, и следующие вершины и индексы описывают куб (обратите внимание, что куб специально не имеет нижней части)
Vertex cube[]
{
{-0.25f, -0.5f, 0.25f},
{-0.25f, 0.5f, 0.25f},
{0.25f, 0.5f, 0.25f},
{0.25f, -0.5f, 0.25f},
{-0.25f, -0.5f, 0.5f},
{-0.25f, 0.5f, 0.5f},
{0.25f, 0.5f, 0.5f},
{0.25f, -0.5f, 0.5f}
};
unsigned short cubeIndices[]{
0, 1, 2, // front
0, 2, 3,
4, 5, 6, // back
4, 6, 7,
1, 5, 6, // top
1, 6, 2,
0, 4, 5, // left
0, 5, 1,
3, 2, 6, // right
3, 6, 7
};
У меня нет представления Глубина / Трафарет, как я предполагаю, что я делаю не нужно, так как это всего лишь один простой куб. Я создал ConstantBuffer
struct ConstantBuffer {
DirectX::XMMATRIX model;
DirectX::XMMATRIX view;
DirectX::XMMATRIX projection;
};
Этот буфер заполнен на основе методов, которые я использую из библиотеки DirectXMath SDK.
// Based on MSDN, direct x uses left handed und looks in positive Z
m_constantBufferData.model = m_constantBufferData.model * DirectX::XMMatrixTranslation(0.0f, 0.0f, 8.0f); // move it by 8 units in positive z)
m_constantBufferData.view = DirectX::XMMatrixIdentity(); // I assume we do not need to put anything in view, because the object is in positive z and center
m_constantBufferData.projection = DirectX::XMMatrixPerspectiveFovLH(DirectX::XMConvertToRadians(90.0f), 1920.0f/1080.0f, 0.1f, 100.0f);
//m_constantBufferData.projection = DirectX::XMMatrixOrthographicLH(1920.0f, 1080.0f, 0.1f, 100.0f);
BackBuffer и Window имеют размер 1920x1080 пикселей.
Мой Vertex Shader выглядит следующим образом:
cbuffer simpleConstantBuffer : register(b0)
{
matrix model;
matrix view;
matrix projection;
}
float4 main(float4 pos : POSITION) : SV_POSITION
{
float4 output = pos;
output = mul(output, model);
output = mul(output, view);
output = mul(output, projection);
return output;
}
Я не знаю, что может быть не так. На экране ничего не рисуется, хотя мой пиксельный шейдер выводит красный цвет, и если я установил все матрицы на Identity Matrix, я вижу переднюю красную грань куба. Я предполагаю, что это что-то с матрицей перспективы (ортогональная тоже не работает)?
Любая идея, как отладить это дальше или что может быть не так?
ОБНОВЛЕНИЕ: Как дополнение это то, что nvidia nsight показывает мне, какие матрицы в буфере констант в случае, если это помогает:
Model:
(1.00, 0.00, 0.00, 0.00)
(0.00, 1.00, 0.00, 0.00)
(0.00, 0.00, 1.00, 8.00)
(0.00, 0.00, 0.00, 1.00)
View:
(1.00, 0.00, 0.00, 0.00)
(0.00, 1.00, 0.00, 0.00)
(0.00, 0.00, 1.00, 1.00)
(0.00, 0.00, 0.00, 1.00)
Projection:
(0.56, 0.00, 0.00, 0.00)
(0.00, 1.00, 0.00, 0.00)
(0.00, 0.00, 1.00, -0.10)
(0.00, 0.00, 1.00, 0.00)