gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:25:23 27 4
gpt4 key购买 nike

编辑:我没有设置深度模板 View ,这会是个问题吗?

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

下面是打包在 ConstantBuffer 中的世界、 View 和投影矩阵的创建:

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;
}

这和教程里的很不一样,因为我无法编译他们的版本。我试图评论 View 转换,它按预期工作。

我还尝试使用 NSight 调试框架,它显示三角形存在,但颜色丢失了。

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

编辑:视口(viewport)MinDepthMaxDepth 分别设置为0.01 和1。

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

enter image description here

从位置 (1, 1, 1) 开始:

enter image description here

最佳答案

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

您在 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

关于c++ - 更改相机位置会导致某些顶点的颜色消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com