2013-07-11 154 views
0

我試圖讓我的周圍3D開發與XNA的頭,我有一個看似簡單的查詢,我似乎無法找到答案。Matrix.CreateRotation VS頂點着色器

如果我理解正確,我們有頂點着色器,用於變換頂點。但是,在矩陣類中,我也有各種方法,例如CreateRotationY等,它們似乎也是這樣做的。

我應該用什麼來改變我的頂點?頂點着色器或矩陣內部的方法?兩者之間有什麼不同嗎?

回答

0

Matrix類裏面各種方法,如CreateRotationY等 這似乎做同樣的事情

當您使用Matrix.CreateRotationY(),你實際上並沒有將任何頂點。您正在創建(計算)矩陣,該矩陣將最終發送到着色器,頂點將由其轉換。

所以頂點變換的繁重的,甚至當你使用C#矩陣方法着色器總是完成。將這兩種選擇(Xna vs HLSL中的矩陣方法)想象成實現相同目標的兩種獨立方式是沒有意義的。它們代表了這個難題的不同和必要的部分。

+0

等待,所以如果我使用Matrix.CreateRotationY(),它將使用CPU創建矩陣和GPU來基於矩陣進行最終變換?那麼不管我是否使用HLSL,所有頂點最終都會通過頂點着色器發送? – user1435899

+0

是的。通常,「Model」的未轉換頂點存儲在GPU內存中,並且它們不會被c#更改或訪問。每個幀的副本都通過GPU的着色器進程發送,通過任何矩陣從C#(Draw方法)發送到着色器。下一幀,新的和可能不同的一組矩陣被髮送到GPU以轉換原始頂點的新副本。由於新副本的轉換與上一幀的副本不同,因此模型似乎會移動或旋轉。 –

0

頂點着色器在GPU上運行,矩陣你在談論用於通過對象在你的RAM運行,使用CPU。

我應該使用變換我的頂點?

這取決於。

頂點着色器非常快,因爲他們在GPU上運行,通過運行一些驚人的效果,你自由CPU做別的事情,並psuh在GPU上的所有工作負載,這是專爲注重準確矩陣與向量運算通過它的結構。

在CPU,使用矩陣,你可以做小而短不是很(「非常」是相對於你的程序性能問題的概念)的計算密集型操作,如移動計算的GPU,擁有成本。但這一切都取決於您的應用程序在做什麼,因此您必須進行測量。

一般而言,他們建議在可能的時候使用着色器進行快速計算。

+0

我明白了,我可以繼續假設與頂點着色器將使用HT&L功能,坐在GPU,而矩陣法將使用CPU上的SSE功能轉變? – user1435899

+0

@ user1435899:HT&L不是強制存在的(afaik),所以我不會闡述一個*方法*它應用calculaton。 – Tigran