創作內容

6 GP

遊戲製作日誌 [ 281 ] - 向量小分享

作者:悠浪貓│2015-06-30 23:51:13│巴幣:12│人氣:2585
製作進度

上班日,研究日


碎碎念

數學、向量、運算....編輯器....

我快炸掉啦~~~~

這禮拜真的累慘了......

每次都要到快下班才會靈光一閃...

________________________________________


這禮拜應該會比較少編輯器的進度了

所以乾脆來做些心得紀錄和分享吧!

鑑於這個禮拜都在玩向量

我就來提供一些向量運算的基本公式和心得吧!


向量就是表示「一個方向」的「量值」

所以簡單的三個參數就包含了「方向」還有他的「量」,是一個很方便的參數

而向量運算可以做很多的事情

但是我們必須先了解一些工具


首先我們了解向量是一個像這樣的值

Vector  ( x, y, z )

代表了這個向量在三個軸的不同量,所以常常可以用來表示往某個方向的位移量

不過通常都會把這個 向量 轉換成長度 1 的「單位向量」,我們才方便運算

那在 Unity 就可以用 Vector.normalized 來取得這個像向量的單位向量


而通常為了做一些 Smooth 的運算

我們會需要取得跟這個「向量垂直」的向量,也就是「法向量」

怎麼取呢?

以 3D 的狀況來說,只有平面才有法向量,因為 3D 狀態下一個向量的法向量是無限多的

所以我只探討 2D 的部分

假設向量 Vector ( x, y ) ,那他的法向量是什麼呢

答案是

Normal ( -y, x ) 或者 Normal ( y, -x )

我們一般會把 法向量 稱為 Normal

嗯,一定有人聽過 NormalMap,那個 Normal 就是這個 Normal,不過這邊不提,請去翻圖學!

那接著~嗯?為什麼有兩條呢?

因為向量是有方向性的,跟 Vector 向量垂直的向量,當然有分左右兩邊囉

這怎麼來的?


這邊就會引入另一個公式

Unity 中的 Vector3 有一個 function 叫 Vector3 . Dot ( 向量A , 向量B )

Dot 的算法是這樣的

向量 A 的 x * 向量 B 的 x  +  向量 A 的 y * 向量 B 的 y

這是用來算什麼的呢?

這是用來算 A 向量「投影」到 B 向量 會產生多大的影子

如果 A 是 B 的法向量,那就是垂直,那投影上去根本就不會有影子

所以會得到 0

所以 Vector ( x, y ) 的法向量就很好取囉,把xy個顛倒過來,隨便選一個加上負號就行了!



好啦,我們有向量,有法向量,我們就可以用這兩個做很多很棒的運算囉

但是!

我們知道法向量有兩條

不過要怎麼知道我要的是哪一條呢?

Smooth 運算算錯方向可是會很糗的!

所以我們假設有一個 向量 Vector (x, y) 和向量上面的一個點 VectorPoint ( v1, v2 )

還有一個在這條向量旁邊的一個點 Point ( p1, p2 )

我們要怎麼知道哪條法向量會偏向 Point 這個點呢?

欸嘿~ 這邊就又要用到 Vector3.Dot 投影了!

當兩個向量是反方向的時候,因為根本就投影不到對方身上,所以就會投影出負值

所以要判定哪個法向量是我們想要的

很簡單!

先取出一條 向量連到 Point 的向量 .Point  - VectorPoint

假設叫做 PointVector (不准笑我的命名!)

我們只要分別拿這個 PointVector 去 Dot 兩個法向量

看哪個法向量得出的結果是正的就行了



最後的最後

在 Unity 中我們要怎麼旋轉一個向量呢?

很簡單!

Quaternion.Eular ( x軸角度, y軸角度, z軸角度 ) * 想旋轉的向量 = 旋轉過的向量!

簡單吧!

但是注意,Quaternion 一定要在前面哦!


向量數學真的是個很美麗的東西

雖然我最近被他玩的有點腦弱...


以上!
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2882878
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unlimited Abyss

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

6喜歡★magicyeats 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:遊戲製作日誌 [ 280... 後一篇:遊戲製作日誌 [ 282...

追蹤私訊切換新版閱覽

作品資料夾

a86189642
給你顆紅心,願你元氣滿滿事事順心 ***(≧▽≦)/***看更多我要大聲說昨天13:48


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】