簡體   English   中英

傳遞給頂點着色器之前的矩陣轉置

[英]Matrix transposition before passing to the vertex shader

我對將矩陣傳遞給頂點着色器感到非常困惑,據我所知,您必須在將矩陣傳遞給頂點着色器之前對其進行轉置。

但是當我將它傳遞給頂點着色器時,我的世界矩陣無法正常工作,它在縮放和旋轉方面工作正常,但平移會導致奇怪的視覺故障。 因此,通過反復試驗,我發現可以通過在將世界矩陣傳遞給頂點着色器之前不轉置世界矩陣來解決這個問題,但是當我對視圖和投影矩陣進行相同嘗試時,沒有任何效果。

我不明白為什么我很困惑,我是否必須轉置除世界矩陣之外的所有矩陣?

這取決於着色器的代碼。

如果沒有任何/Zpr/Zpc HLSL 編譯器選項,當您的 HLSL 代碼顯示pos = mul( matrix, vector )該矩陣應為列主矩陣。 當 HLSL 代碼說pos = mul( vector, matrix ) ,矩陣應該是行主矩陣。

列主矩陣在 GPU 上的處理速度稍快,原因如下。

  1. 用於乘法的 HLSL 編譯為四個dp4指令。 點積在 GPU 上速度很快,在任何地方都被廣泛使用,尤其是在像素着色器中。

  2. VRAM 訪問模式稍好一些。 如果您想了解更多,關鍵字是“內存合並”,大多數來源都是關於 CUDA 的,但這同樣適用於圖形。

這就是 Direct3D 默認為列主要布局的原因。

暫無
暫無

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

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