用 Vex 求兩向量的夾角度數

在出PASS的時候,想出一個物體的正反面給後期合成使用,研究了一下發現似乎沒有相應的屬性,只好自己接出來。

方法很簡單,取得物體的Normal向量和物體對攝影機位置的向量,再判斷兩向量之間的夾角度數,大於或等於九十度的時候就等於是翻面了。

理論上很基本,但數學這科目離我真的太遙遠了,惡補爬文了一下,得到在VEX的公式:

degrees(acos(dot(normalize(vector A), normalize(vector B ))

在VOPSOP中我是這樣接:

攝影機的center減掉P取得物體對攝影機的向量,跟Normal都做normalize後,用Dot Product相接,再用Trigonometric Functions的Arc Cosine得到角度,最後再用Radians To Degrees轉成度數。

接下來再判斷是否大於等於90度來在VEX shader做輸出得到首圖右側Pass。