我正在尝试使用 Direct3D 11 在屏幕上渲染一个简单的三角形,但没有任何显示。这是我的顶点:
SimpleVertex vertices[ 3 ] =
{
{ XMFLOAT3( -1.0f, -1.0f, 0.0f ) },
{ XMFLOAT3( 1.0f, -1.0f, 0.0f ) },
{ XMFLOAT3( -1.0f, 1.0f, 0.0f ) },
};
预期的输出是一个三角形,一个点在屏幕的左上角,一个点在屏幕的右上角,一个点在屏幕的左下角。但是,任何地方都没有渲染任何内容。
我没有执行任何矩阵转换,顶点着色器只是将输入直接传递给输出。一切似乎都设置正确,当我在 Visual Studio 2012 中使用图形调试器时,正确的顶点位置被传递给顶点着色器。但是,它直接从顶点着色器阶段跳到管道中的输出合并阶段。我假设这意味着没有任何东西被发送到像素着色器,这再次意味着向量在光栅化阶段被丢弃。为什么会这样?
这是我的光栅化状态:
D3D11_RASTERIZER_DESC rasterizerDesc;
rasterizerDesc.AntialiasedLineEnable = false;
rasterizerDesc.CullMode = D3D11_CULL_NONE;
rasterizerDesc.DepthBias = 0;
rasterizerDesc.DepthBiasClamp = 0.0f;
rasterizerDesc.DepthClipEnable = true;
rasterizerDesc.FillMode = D3D11_FILL_SOLID;
rasterizerDesc.FrontCounterClockwise = false;
rasterizerDesc.MultisampleEnable = false;
rasterizerDesc.ScissorEnable = false;
rasterizerDesc.SlopeScaledDepthBias = 0.0f;
我的视口(宽度/高度是与我的后台缓冲区匹配的窗口客户区,在我的测试设置中设置为 1024x576):
D3D11_VIEWPORT viewport;
viewport.Height = static_cast< float >( height );
viewport.MaxDepth = 1.0f;
viewport.MinDepth = 0.0f;
viewport.TopLeftX = 0.0f;
viewport.TopLeftY = 0.0f;
viewport.Width = static_cast< float >( width );
谁能看到是什么让光栅化阶段放弃了我的顶点?还是我的 D3D 设置的任何其他部分可能导致此问题?