2013-02-11 55 views
1

我知道正常的變換矩陣是模型/視圖/投影矩陣的轉置的倒數,但它看起來像「inverse」僅在GLSL 1.4中添加,並且我找不到「transpose」。我是否需要將一堆數學複製並粘貼到我的GLSL中? (如果是這樣,是否有一個很好的權威的開源地址我可以複製?)給定模型/視圖/投影轉換矩陣,如何在不使用GLSL 1.2中的不推薦使用的特性的情況下計算正常矩陣?

要清楚,我問的是「如何計算gl_NormalMatrix而不使用不推薦使用的API」?

+0

BTW,還有一大堆點的不是避免「不推薦使用的API「,如果您僅限於GL 2.1。 – 2013-02-11 02:08:41

+1

如果你堅持在覈心配置文件上工作的東西,將OpenGL和OpenGL ES的新版本轉發端口不是更容易嗎? – Glyph 2013-02-12 02:44:59

回答

3

這通常是通過計算模型視圖矩陣

N = (M^-1)^T 

在CPU上的倒數的轉置,然後上傳矩陣就像載任何其它基質進行處理。

+0

是的,這是我最終做的。具體來說,我最終在Python中使用NumPy來完成它,在這裏它是'轉置(M [:3,:3])。',但我懷疑在C中有點痛苦。 – Glyph 2013-02-12 02:49:31

0

只是爲了澄清這裏還有transpose,如果你不做任何規模的正規矩陣是3×3子矩陣,在GLSL你可以做

normal = mat3(model_matrix) * v_normal; 
+0

這應該是避免,因爲它不能處理*所有情況。儘管你明確提到這個限制是確實的,但它不太可能是一個現實的期望,因爲程序不斷被修改......突然間,有人擴展了某些東西,並且會在縮放代碼中尋找問題,實際上,不存在......並且由於GPU中沒有針對着色器的逐步調試器,這只是要求麻煩。 – ray 2017-01-29 04:34:03