我有一些想法,但我不確定,因爲我在webgl中沒有大師。用頂點着色器在webgl中製作相機嗎?
在WebGL中,沒有攝像頭。如果想要模擬它,那麼他必須用很多對象進行操作...準確地說,他必須將位置改變爲數十萬個頂點。我沒有深入學習Three.js或Babylon js,所以我不知道他們如何使用相機。
由於頂點着色器可以轉換頂點位置,並且因爲我們可以將頂點着色器camera matrix
傳遞給頂點着色器,所以它會讓它進行計算,所以GPU會做硬件而不是CPU嗎?
我有一些想法,但我不確定,因爲我在webgl中沒有大師。用頂點着色器在webgl中製作相機嗎?
在WebGL中,沒有攝像頭。如果想要模擬它,那麼他必須用很多對象進行操作...準確地說,他必須將位置改變爲數十萬個頂點。我沒有深入學習Three.js或Babylon js,所以我不知道他們如何使用相機。
由於頂點着色器可以轉換頂點位置,並且因爲我們可以將頂點着色器camera matrix
傳遞給頂點着色器,所以它會讓它進行計算,所以GPU會做硬件而不是CPU嗎?
你的意思是:創建使用類似的位置和方向,而不是從應用程序創建,並在着色器發送所產生的基質中的一些數據頂點着色器視圖矩陣?
實際上最後一種情況是THREE.js和其他很多解決方案的情況: 表示攝像頭的對象可以通過JavaScript進行操作。然後在繪製時,視圖矩陣由一些位置和方向參數構建,併發送到活動着色器程序。
創建一個視圖矩陣中的一些步驟來完成:
決定矩陣應該在哪裏(或什麼時候)被計算取決於視圖矩陣在只繪製一個圖像的過程中沒有改變的想法。事實上,視圖矩陣和投影矩陣意味着在兩個圖像之間進行修改。
不要忘記,頂點着色器會爲發送到管道的每個頂點執行一次。 如果您在頂點着色器中計算視圖矩陣,則每個圖像將重新計算一千次。
因此,視圖矩陣的計算應該更好地保留在應用程序中併發送給着色器程序。
如果你想從浮點運算中的着色器的性能中受益,你可以考慮使用計算着色器(遺憾的是不存在於WebGL中),或者考慮一些從着色器程序讀回數據的機制來計算矩陣一次,並在下一次平局呼叫時發送。
「從應用程序創建它並在着色器中發送結果矩陣」這就是我的意思。 –
這意味着許多3D圖形庫就是這種情況。 –
http://games.greggman.com/game/webgl-3d-cameras/ – gman