我試圖讓我的周圍3D開發與XNA的頭,我有一個看似簡單的查詢,我似乎無法找到答案。Matrix.CreateRotation VS頂點着色器
如果我理解正確,我們有頂點着色器,用於變換頂點。但是,在矩陣類中,我也有各種方法,例如CreateRotationY
等,它們似乎也是這樣做的。
我應該用什麼來改變我的頂點?頂點着色器或矩陣內部的方法?兩者之間有什麼不同嗎?
我試圖讓我的周圍3D開發與XNA的頭,我有一個看似簡單的查詢,我似乎無法找到答案。Matrix.CreateRotation VS頂點着色器
如果我理解正確,我們有頂點着色器,用於變換頂點。但是,在矩陣類中,我也有各種方法,例如CreateRotationY
等,它們似乎也是這樣做的。
我應該用什麼來改變我的頂點?頂點着色器或矩陣內部的方法?兩者之間有什麼不同嗎?
Matrix類裏面各種方法,如CreateRotationY等 這似乎做同樣的事情
當您使用Matrix.CreateRotationY()
,你實際上並沒有將任何頂點。您正在創建(計算)矩陣,該矩陣將最終發送到着色器,頂點將由其轉換。
所以頂點變換的繁重的,甚至當你使用C#矩陣方法着色器總是完成。將這兩種選擇(Xna vs HLSL中的矩陣方法)想象成實現相同目標的兩種獨立方式是沒有意義的。它們代表了這個難題的不同和必要的部分。
頂點着色器在GPU上運行,矩陣你在談論用於通過對象在你的RAM運行,使用CPU。
我應該使用變換我的頂點?
這取決於。
頂點着色器非常快,因爲他們在GPU上運行,通過運行一些驚人的效果,你自由CPU做別的事情,並psuh在GPU上的所有工作負載,這是專爲注重準確矩陣與向量運算通過它的結構。
在CPU,使用矩陣,你可以做小而短不是很(「非常」是相對於你的程序性能問題的概念)的計算密集型操作,如移動計算的GPU,擁有成本。但這一切都取決於您的應用程序在做什麼,因此您必須進行測量。
一般而言,他們建議在可能的時候使用着色器進行快速計算。
我明白了,我可以繼續假設與頂點着色器將使用HT&L功能,坐在GPU,而矩陣法將使用CPU上的SSE功能轉變? – user1435899
@ user1435899:HT&L不是強制存在的(afaik),所以我不會闡述一個*方法*它應用calculaton。 – Tigran
等待,所以如果我使用Matrix.CreateRotationY(),它將使用CPU創建矩陣和GPU來基於矩陣進行最終變換?那麼不管我是否使用HLSL,所有頂點最終都會通過頂點着色器發送? – user1435899
是的。通常,「Model」的未轉換頂點存儲在GPU內存中,並且它們不會被c#更改或訪問。每個幀的副本都通過GPU的着色器進程發送,通過任何矩陣從C#(Draw方法)發送到着色器。下一幀,新的和可能不同的一組矩陣被髮送到GPU以轉換原始頂點的新副本。由於新副本的轉換與上一幀的副本不同,因此模型似乎會移動或旋轉。 –