iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
自我挑戰組

翻車機率極高的2D平台遊戲(2D Platformer)製作系列 第 8

[Day 8] 2D世界中的數學 (一)

今日目標

  • 基本的數學函式庫(向量與陣列)

要多少才夠

從另一個角度看,我認為遊戲中的從小小的讓角色移動,到一些嘆為觀止的特效,背後都是由大量的數學轉換而來的。

如果要達上述所說,讓角色移動,據我所知就是向量矩陣了,也是數學中,線性代數這一塊,向量的話,二維就夠了,矩陣的話,雖然「應該」不太會有3D的要處理,但就我所知,相機視角相關的運算,還是會需要4x4的運算。

今天只是先把一些基本的功能寫起來,之後會用到。

向量

向量的話我這邊對二維的目前就先處理幾個

V2f V2fAdd(V2f a, V2f b);
V2f V2fSub(V2f a, V2f b);
V2f V2fScalef(V2f a, float f);
float V2fDot(V2f a, V2f b);
float V2fLen(V2f v);
V2f V2fNorm(V2f v);
float V2fDist(V2f a, V2f b);

然後就是依照自己的數學知識填寫功能了,或是直接去google忘記的功能 :)

矩陣

矩陣就更少了,完成4x4矩陣的線性轉換(Linear Transformation),之後可能會發現只要3x3就好(因為少一軸),但就線這樣吧...

V4f Mat4MulV4f(Mat4 mat, V4f v);
Mat4 Mat4MulMat4(Mat4 m1, Mat4 m2);

完成了,但後面還有很多坑,感覺很遙遠

寫在這邊為了讓我整理一下,一些我聽過的東西,但沒有接觸過,之後還有要處理的「數學」相關的東西。

  1. SIMD這個好像與與指令集有關,看起來是可以加快電腦數學運算的技術,我知道是電腦實際上只有0跟1,浮點數也是透過IEEE-754拼湊成的。
  2. 浮點數精度
  3. lerpslerp

說說「我認為的」程式與數學關係

當程式設計師數學要多好?

這個問題叨擾著很多剛學習程式語言的夥伴們,當然我也不例外。
通常,如果把這個問題拿到去問一些學長前輩,或是在社群媒體跟業界的大佬們,我比較常聽到兩種答案

  1. 不需要太好,高中甚至國中程度就夠了,更多時候需要的是對資料結構、軟體架構的掌握,或是與硬體相關組織結構的知識。
  2. 能有多少,就學多少,不會虧的。數學這個領域很龐大。

確實這兩個答案我都信服,也走就達到了解答,但時不時還是會一直詢問「數學要多好?」「數學要多好?」,不論是問自己,還是其他人,尤其是這在碰到正在學習「因工作原因,不得不學」的數學知識上,這個問題,比較像是從問「數學要多好?」,變成「我數學是不是真的很爛」。

後來,我忘記是從哪邊來的,我聽到了一個稍微不一樣的答案:

Q: 當程式設計師數學要多好?我要怎麼像你一樣厲害?

A: 你認為大老或是敬重的程式設計師,哪個你視為偶像的,覺得他的數學是差的。我沒有特別厲害,只是一點一點從中試錯而已,數學讓很多人排斥沒錯,但你這學一點一點往前堆近。

參考

這樣,簡單的數學函式庫就完成了,以興趣的可以到我的github看看。


上一篇
[Day7] 簡單的Log
下一篇
[Day9] 預設貼圖
系列文
翻車機率極高的2D平台遊戲(2D Platformer)製作33

尚未有邦友留言

立即登入留言