目前,我計算世界視圖投影矩陣在我的應用程序,而不是GPU。我想把這個計算轉移到GPU上,但我目前無法做到這一點。矩陣乘法並不在我的頂點着色器的工作
案例1(見下文)的作品非常好,但情況2不,我不知道我做了什麼錯。
在我的相機類,我計算查看和投影矩陣是這樣的:
ViewMatrix = SharpDX.Matrix.LookAtLH(_cameraPosition, _lookAtPosition, SharpDX.Vector3.UnitY);
ProjectionMatrix = SharpDX.Matrix.PerspectiveFovLH((float)Math.PI/4.0f, renderForm.ClientSize.Width/(float)renderForm.ClientSize.Height, 0.1f, 500.0f);
然後,我計算在渲染過程中世界矩陣我的每個模型:
SharpDX.Matrix worldMatrix = SharpDX.Matrix.Translation(_position);
案例1:矩陣在我的應用程序計算
當渲染模型,我計算世界視圖投影矩陣這樣的:
SharpDX.Matrix matrix = SharpDX.Matrix.Multiply(worldMatrix, camera.ViewMatrix);
matrix = SharpDX.Matrix.Multiply(matrix, camera.ProjectionMatrix);
matrix.Transpose();
而在我的頂點着色器,計算我的頂點的最終位置,通過調用:
output.pos = mul(input.pos, WVP);
一切正常!
案例2:矩陣在HLSL計算而不是在我的應用程序計算什麼的
,我只寫了三個矩陣世界,查看和投影到我的頂點着色器的常數緩衝區在HLSL計算一切:
matrix mat = mul(World, View);
mat = mul(mat, Projection);
mat = transpose(mat);
output.pos = mul(input.pos, mat);
它的工作。我在場景中沒有看到任何東西。所以我假設一些計算是錯誤的。我檢查了幾次我的代碼。
要麼我是盲人,要麼是愚蠢的。我做錯了什麼?
它可能是矩陣被視爲行主或列主要差異的結果。你有沒有嘗試從案例2中的着色器中移除轉置? –
亞當萬里達!感謝您的答覆。 我已經試過了。在案例1中移除轉置時,我沒有看到我的模型。在案例2中移除轉置時,我仍然看不到它們。 – Endgegner85
您是否嘗試過使用任何GPU調試器,如內置於Visual Studio中的調試器?檢查恆定緩衝區的內容可能是值得的。 –