簡體   English   中英

DirectX 11:着色器無法創建世界視圖矩陣

[英]DirectX 11: Shader not creating world view matrix

過這樣的問題來了之后這里 ,其中的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);

-0.999999940, 0.000000000,  0.000000000, 0.000000000
 0.000000000, 0.999999940,  0.000000000, 0.000000000
 0.000000000, 0.000000000, -1.00000000,  5.00000000
 0.000000000, 0.000000000, -1.00000000,  5.00000000

至少對我來說看起來不錯。 接下來,我的着色器開始做它的事情,但是在這里事情變得很時髦,檢查反匯編在以下情況下產生的結果:

output.position = mul(position, WVP);

Vertex Shader:
00000000  dp4 o0.x, v0.xyzw, cb0[0].xyzw  
00000001  dp4 o0.y, v0.xyzw, cb0[1].xyzw  
00000002  dp4 o0.z, v0.xyzw, cb0[2].xyzw  
00000003  dp4 o0.w, v0.xyzw, cb0[3].xyzw  
00000004  mov o1.xyzw, v1.xyzw  

對於每個乘法,值返回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的任何猜測?

透視投影的近平面必須大於零。 如果為零,則近平面就是相機所在的位置,並且場景中的所有內容都收斂到一個點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM