更改相机位置会导致某些顶点的颜色消失

时间:2016-07-09 22:28:12

标签: c++ transformation directx-11 hlsl

编辑:我没有设置深度模板视图,这可能是个问题吗?

我正在尝试关注此tutorial,但当我在XMMatrixLookAtLH中更改相机位置时,某些顶点的颜色会消失。感觉我正在遇到未定义的行为。

以下是ConstantBuffer打包的世界,视图和投影矩阵的创建:

ConstantBuffer cb;
cb.world = DirectX::XMMatrixIdentity();
cb.view = XMMatrixLookAtLH({ 4.0f, 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 0.0f });
cb.projection = DirectX::XMMatrixPerspectiveFovLH(XM_PI / 2.0f, (float)windowWidth / (float)windowHeight, 0.1f, 110.0f);

布局完全按照它们的创建顺序排列,并在顶点着色器中进行布局。我转移他们。我还尝试用alignas(16)声明结构,但它没有效果。

这是我创建的缓冲区:

ZeroMemory(&bd, sizeof(D3D11_BUFFER_DESC));
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
bd.ByteWidth = sizeof(cb);
bd.CPUAccessFlags = 0;
bd.MiscFlags = 0;
bd.StructureByteStride = 0;
bd.Usage = D3D11_USAGE_DEFAULT;

ZeroMemory(&initialData, sizeof(D3D11_SUBRESOURCE_DATA));
initialData.pSysMem = &cb;

hr = device->CreateBuffer(&bd, &initialData, &constBuffer);

deviceContext->VSSetConstantBuffers(0, 1, &constBuffer);

与教程相比,我在创建时初始化它。我之后尝试过初始化它,但它没有改变任何东西。

这是我的顶点着色器:

cbuffer ConstantBuffer : register(b0)
{
    matrix world;
    matrix view;
    matrix projection;
}

struct PixelInputType
{
    float4 pos:SV_POSITION;
    float4 color:COLOR;
};

PixelInputType main(float4 pos : POSITION, float4 color : COLOR)
{
    PixelInputType output = (PixelInputType)0;
    output.pos = mul(pos, world);
    output.pos = mul(output.pos, view);
    output.pos = mul(output.pos, projection);
    output.color = color;
    return output;
}

它与教程中的内容大不相同,因为我无法编译它们的版本。我试图评论视图转换,它按预期工作。

我也尝试使用NSight调试帧,它显示三角形存在,但颜色丢失。

我不知道是什么原因导致这种行为。我正在编译x64。我删除了检查的可读性,但它们出现在每次返回HRESULT的调用中。失败时,检查器总是抛出。立方体以原点为中心,与教程完全相同。

编辑:视口MinDepthMaxDepth设置为 0.01 ,相应地设置为1。

以下是位置(4,0,0)的屏幕截图:

enter image description here

和从位置(1,1,1):

enter image description here

1 个答案:

答案 0 :(得分:1)

这是由近平面剪裁引起的。你需要研究近/远飞机。

在D3D初始化时定义近平面。

// Initialize the Direct3D object.
result = m_D3D->Initialize(screenWidth, screenHeight, VSYNC_ENABLED, hwnd, FULL_SCREEN, SCREEN_DEPTH, SCREEN_NEAR);

编辑:您可以从以下链接中阅读更多详细信息。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb206341(v=vs.85).aspx