C++ DirectX 11:着色器未创建世界视图矩阵

C++ DirectX 11:着色器未创建世界视图矩阵,c++,debugging,visual-studio-2013,shader,directx-11,C++,Debugging,Visual Studio 2013,Shader,Directx 11,遇到此问题后,Entity::draw()调用将不会显示,因为顶点着色器值在与世界视图矩阵相乘时返回0 这个问题是由一个错误的常量缓冲输入引起的。然而,在检查了这些值之后,我似乎无法理解手头的问题。我预先乘以了世界、视图和投影矩阵: mWorld = XMMatrixIdentity(); mView = XMMatrixLookAtLH(Eye, At, Up); mProjection = XMMatrixPerspectiveFovLH(XM_PIDIV2, 1.0, 0.0f, 100

遇到此问题后,
Entity::draw()
调用将不会显示,因为顶点着色器值在与世界视图矩阵相乘时返回0

这个问题是由一个错误的常量缓冲输入引起的。然而,在检查了这些值之后,我似乎无法理解手头的问题。我预先乘以了世界、视图和投影矩阵:

mWorld = XMMatrixIdentity();
mView = XMMatrixLookAtLH(Eye, At, Up);
mProjection = XMMatrixPerspectiveFovLH(XM_PIDIV2, 1.0, 0.0f, 1000.0f);
mWVP = mWorld*mView*mProjection;
mWVP

-0.999999940, 0.000000000,  0.000000000, 0.000000000
 0.000000000, 0.999999940,  0.000000000, 0.000000000
 0.000000000, 0.000000000, -1.00000000, -1.00000000
 0.000000000, 0.000000000,  5.00000000,  5.00000000
mWVP
转置后进入常量缓冲区:

WorldCB.mWorldVP = XMMatrixTranspose(mWVP);
DeviceContext->UpdateSubresource(MatrixBuffer, 0, NULL, &WorldCB, 0, 0);
DeviceContext->VSSetConstantBuffers(0, 1, &MatrixBuffer);
XMMatrixTranspose(mWVP)

至少在我看来,这还行。下一步我的着色器开始做它的事情,但这里是事情变得古怪的地方,检查反汇编时会产生以下结果:

output.position=mul(位置,WVP)

对于每次乘法,值返回0。如果
output.position=position值正确,框显示,但不在世界变换内

下面是完整的着色器文件:

cbuffer ConstantBuffer:register(b0)
{
    matrix WVP;
}

struct VOut
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};

VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
    VOut output;
    output.position = mul(position, WVP); // position;
    output.color = color;

    return output;
}


float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
     return color;
}
编辑:还注意到世界矩阵的转置等于零:

ObjectSpace = m_Scale*m_Rotation*m_Translate;
mWVP = ObjectSpace*direct3D.mView*direct3D.mProjection;

LocalWorld.mWorldVP = XMMatrixTranspose(wWVP);
XMMatrixTranspose(wWVP)

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

这很可能就是问题所在。关于为什么矩阵的转置等于0的任何猜测?

透视投影的近平面必须是大于零的某个值。如果为零,则近平面正好是相机所在的位置,场景中的所有东西都会聚到一个点。

我的生命已经失去了几天。
ObjectSpace = m_Scale*m_Rotation*m_Translate;
mWVP = ObjectSpace*direct3D.mView*direct3D.mProjection;

LocalWorld.mWorldVP = XMMatrixTranspose(wWVP);
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0