Shader基礎(chǔ)筆記(2)- 數(shù)學(xué)基礎(chǔ)

我擦服猪,居然不識(shí)別公式饼拍。好吧想看的同學(xué)自己復(fù)制到別的 Markdown 編輯器上吧彬犯。沒錯(cuò)我就是這么不負(fù)責(zé)任向楼。

左手坐標(biāo)系

舉起右手,用食指和大拇指擺出一個(gè)“L”的手勢谐区,并且讓食指向上湖蜕,大拇指向右。現(xiàn)在宋列,伸出中指昭抒,如果不出意外的話它應(yīng)該指向你的前方。你的大拇指炼杖、食指和中指分別對應(yīng)了+x灭返、+y和+z軸的方向。

當(dāng)需要旋轉(zhuǎn)時(shí)坤邪,在左手坐標(biāo)系中熙含,我們可以這樣判斷方向:舉起左手,握拳艇纺,伸出大拇指讓它指向旋轉(zhuǎn)軸的正方向怎静,那么旋轉(zhuǎn)的正方向就是剩下4個(gè)手指的彎曲方向。

矢量的點(diǎn)積(內(nèi)積)

  1. 在 Unity Shader 中黔衡,我們可以直接使用 dot(a,b) 的代碼來對兩個(gè)矢量值進(jìn)行點(diǎn)積的運(yùn)算蚓聘。
  2. 公式:$ a \times b = (a_x, a_y, a_z) \cdot (b_x, b_y, b_z) = a_xb_x + a_yb_y + a_zb_z $
  3. 我們可以使用點(diǎn)積 a·b 來得到 b 在 a 方向上的有符號(hào)的投影。
  4. 我們可以直接利用點(diǎn)積來求矢量的模:$ v \cdot v = v_xv_x + v_yv_y + v_zv_z = |v|^2 $
  5. 第二個(gè)計(jì)算公式:$ a \cdot b = |a||b| \cos\theta $

矢量的差積(外積)

  1. 矢量差積的結(jié)果仍然是一個(gè)矢量盟劫。
  2. 公式: $ a \times b = (a_x, a_y, a_z) \times (b_x, b_y, b_z) = (a_yb_z - a_zb_y, a_zb_x - a_xb_z, a_xb_y - a_yb_x ) $
  3. 幾何意義:差積將得到一個(gè)同時(shí)垂直于這兩個(gè)矢量的新矢量夜牡。
  4. 不滿足交換律
  5. 另一個(gè)公式:$|a \times b| = |a||b|sin \theta $

基本的變換矩陣

1. 一些基本概念

  1. 線性變換包括:縮放(scale),旋轉(zhuǎn)(rotation)捞高,錯(cuò)切(shear),鏡像(mirroring)渣锦,正交投影等硝岗。
  2. 仿射變換(affine transform):合并線性變換和平移變換的變換類型。
  3. 齊次坐標(biāo)(homogeneous coordinate):由三維矢量轉(zhuǎn)換而成的四維矢量(事實(shí)上齊次坐標(biāo)的維度可以超過四維)袋毙。齊次坐標(biāo)只是為了方便計(jì)算而使用的一種表示方法而已型檀。
  4. 我們把表示純平移、純旋轉(zhuǎn)和純縮放的變換矩陣叫做基礎(chǔ)變換矩陣听盖。

2. 基礎(chǔ)變換矩陣

基礎(chǔ)變換矩陣:
$$ \left[ \begin{matrix} M_{x \times x} & t_{3 \times 1}\ 0_{1 \times 3} & 1 \end{matrix} \right] $$

其中胀溺,左上角的 $M_{x \times x}$ 用于表示旋轉(zhuǎn)和縮放裂七,$t_{3 \times 1}$ 表示平移。

3. 平移矩陣

$$ \left[ \begin{matrix} 1 & 0 & 0 & t_x \ 0 & 1 & 0 & t_y \ 0 & 0 & 1 & t_z \ 0 & 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x \ y \ z \ 1 \end{matrix} \right] = \left[ \begin{matrix} x + t_x \ y + t_y \ z + t_z \ 1 \end{matrix} \right] $$

3. 縮放矩陣

$$ \left[ \begin{matrix} k_x & 0 & 0 & 0 \ 0 & k_y & 0 & 0 \ 0 & 0 & k_z & 0 \ 0 & 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x \ y \ z \ 1 \end{matrix} \right] = \left[ \begin{matrix} k_xx \ k_yy \ k_zz \ 1 \end{matrix} \right] $$

4. 旋轉(zhuǎn)矩陣

  1. 如果我們需要把點(diǎn)繞著x軸旋轉(zhuǎn) \theta 度仓坞,可以使用下面的矩陣:
    $$ R_x(\theta)=
    \left[ \begin{matrix}
    1 & 0 & 0 & 0 \
    0 & \cos\theta & -\sin\theta & 0 \
    0 & \sin\theta & \cos\theta & 0 \
    0 & 0 & 0 & 1
    \end{matrix} \right]
    $$
  2. 繞y軸旋轉(zhuǎn):
    $$ R_y(\theta)=
    \left[ \begin{matrix}
    \cos\theta & 0 & \sin\theta & 0 \
    0 & 1 & 0 & 0 \
    -\sin\theta & 0 & \cos\theta & 0 \
    0 & 0 & 0 & 1
    \end{matrix} \right]
    $$
  3. 繞z軸旋轉(zhuǎn):
    $$ R_z(\theta)=
    \left[ \begin{matrix}
    \cos\theta & -\sin\theta & 0 & 0 \
    \sin\theta & \cos\theta & 0 & 0 \
    0 & 0 & 1 & 0 \
    0 & 0 & 0 & 1
    \end{matrix} \right]
    $$

5. 復(fù)合變化

我們可以把平移背零、旋轉(zhuǎn)和縮放組合起來,來形成一個(gè)復(fù)雜的變換過程无埃。復(fù)合變換可以通過矩陣的串聯(lián)來實(shí)現(xiàn):

$$ P_{new} = M_{translation}M_{rotation}M_{scale}P_{old} $$

由于上面我們使用的是列矩陣徙瓶,因此閱讀順序是從右到左($M_{scale}$先和$P_{old}$運(yùn)算),即先進(jìn)行縮放變換嫉称,再進(jìn)行旋轉(zhuǎn)變換侦镇,最后進(jìn)行平移變換。由于計(jì)算結(jié)果是依賴于變換順序的织阅,由于矩陣乘法不滿足交換律壳繁,因此矩陣的乘法順序很重要。我們約定變換順序就是:先縮放荔棉,再旋轉(zhuǎn)闹炉,最后平移

當(dāng)需要組合旋轉(zhuǎn)時(shí)江耀,Unity 中剩胁,旋轉(zhuǎn)的順序是z、x祥国、y昵观,這意味著,當(dāng)給定 $(\theta_x, \theta_y, \theta_z)$ 這樣的旋轉(zhuǎn)角度時(shí)舌稀,得到的組合旋轉(zhuǎn)變換矩陣是:

$$ M_{rotat\theta_z}M_{rotat\theta_x}M_{rotat\theta_y} =
\left[ \begin{matrix}
\cos\theta & -\sin\theta & 0 & 0 \
\sin\theta & \cos\theta & 0 & 0 \
0 & 0 & 1 & 0 \
0 & 0 & 0 & 1
\end{matrix} \right]
\left[ \begin{matrix}
1 & 0 & 0 & 0 \
0 & \cos\theta & -\sin\theta & 0 \
0 & \sin\theta & \cos\theta & 0 \
0 & 0 & 0 & 1
\end{matrix} \right]
\left[ \begin{matrix}
\cos\theta & 0 & \sin\theta & 0 \
0 & 1 & 0 & 0 \
-\sin\theta & 0 & \cos\theta & 0 \
0 & 0 & 0 & 1
\end{matrix} \right]
$$

目前所需要的內(nèi)容不涉及到坐標(biāo)轉(zhuǎn)換等問題啊犬,其他基礎(chǔ)數(shù)學(xué)知識(shí)先不管。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壁查,一起剝皮案震驚了整個(gè)濱河市觉至,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睡腿,老刑警劉巖语御,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異席怪,居然都是意外死亡应闯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門挂捻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉纺,“玉大人,你說我怎么就攤上這事」翘铮” “怎么了耿导?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長态贤。 經(jīng)常有香客問我舱呻,道長,這世上最難降的妖魔是什么抵卫? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任狮荔,我火速辦了婚禮,結(jié)果婚禮上介粘,老公的妹妹穿的比我還像新娘殖氏。我一直安慰自己,他們只是感情好姻采,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布雅采。 她就那樣靜靜地躺著,像睡著了一般慨亲。 火紅的嫁衣襯著肌膚如雪婚瓜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天刑棵,我揣著相機(jī)與錄音巴刻,去河邊找鬼。 笑死蛉签,一個(gè)胖子當(dāng)著我的面吹牛胡陪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碍舍,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柠座,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了片橡?” 一聲冷哼從身側(cè)響起妈经,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捧书,沒想到半個(gè)月后吹泡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡经瓷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年爆哑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片了嚎。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泪漂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出歪泳,到底是詐尸還是另有隱情萝勤,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布呐伞,位于F島的核電站敌卓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伶氢。R本人自食惡果不足惜趟径,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癣防。 院中可真熱鬧蜗巧,春花似錦、人聲如沸蕾盯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽级遭。三九已至望拖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挫鸽,已是汗流浹背说敏。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丢郊,地道東北人盔沫。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蚂夕,于是被迫代替她去往敵國和親迅诬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 二維旋轉(zhuǎn)矩陣(2D Rotation Matrix) 在歐幾里得坐標(biāo)系下婿牍,二維的旋轉(zhuǎn)矩陣可以用一個(gè)旋轉(zhuǎn)角 $\th...
    yfwz100閱讀 5,476評論 1 2
  • TF API數(shù)學(xué)計(jì)算tf...... :math(1)剛開始先給一個(gè)運(yùn)行實(shí)例侈贷。tf是基于圖(Graph)的計(jì)算系統(tǒng)...
    MachineLP閱讀 3,461評論 0 1
  • 1 前言 OpenGL渲染3D模型離不開空間幾何的數(shù)學(xué)理論知識(shí),而本篇文章的目的就是對空間幾何進(jìn)行簡單的介紹等脂,并對...
    RichardJieChen閱讀 6,985評論 1 11
  • 作為備用知識(shí)俏蛮,memo 學(xué)過矩陣?yán)碚摶蛘呔€性代數(shù)的肯定知道正交矩陣(orthogonal matrix)是一個(gè)非常...
    HappyPieBinLiu閱讀 5,794評論 0 5
  • 前幾天跟一位相處得不錯(cuò)的一位寶媽聊天,她家孩子上小班了上遥,她說:“最近好煩啊搏屑,工作不好找,想找一個(gè)長白班的粉楚,雙休的可...
    小米的自白閱讀 351評論 2 2