教孩子寫遊戲:3D遊戲編程離不開矩陣,我們要如何理解矩陣?

2021-01-08 我是遊戲小胡

矩陣,可以說是本課程中的第一塊硬骨頭。雖然說,我們不需要對矩陣有非常深入的理解,但是,這並不代表著我們可以不學矩陣。這麼說吧,如果你對矩陣一無所知,那麼,整個3D遊戲編程你是學不懂的。你可以靠著強大的記憶力把本課程的代碼記住,並且也能通過自己的摸索寫出類似的3D遊戲來,但是,你對其中的原理是不理解的,將來想要寫功能更強大的3D遊戲,就純粹是天方夜譚了。

但是,擺在我面前的難題是:一個成年人想要學習矩陣都有點困難,如何讓小孩子也明白矩陣的一些道理呢?

面對這個難題,我足足思考了幾個月的時間,依舊沒有什麼特別有效的方法。再後來我想明白了:我們不需要讓孩子完全明白矩陣是什麼,我們只需要讓他們知道矩陣中的幾個關鍵知識點就行了,讓他們明白,為什麼3D遊戲編程需要矩陣。

有了這樣的想法之後,我就豁然開朗了。

由於本節內容比較難,所以,我會儘可能地用通俗的語言講明白。接下來,請你跟著我的思路來學習矩陣。

「學」的部分

在這裡,我先假定你有初中數學的水平。在「習」的部分中,我會給出建議,如果你的孩子只有小學水平,你應該把哪些知識教給他。

一、矩陣是什麼樣子的?

從表面上看,矩陣是一個由多個數字組合起來的方陣,比如說下面這個樣子:

從這裡我們看出矩陣的基本特徵:

1.「矩」的意思是矩形,由數字組成的矩形;

2.「陣」的意思是整齊,這些數字排列起來是非常整齊的,並不會歪歪扭扭;

3.矩陣中,橫向的數字是行,豎向的數字是列,行和列都是整數,可以是1或者是n(n是整數);

4.矩陣中,通過「第幾行、第幾列」這種簡便的方式來確定某個數字的具體位置。

以上面這個矩陣為例。它是一個3行×3列的矩陣,數字「1」在第1行第1列,數字「9」在第2行第2列,數字「8」在第3行第2列。

知道矩陣長什麼樣子後,你可能就會有一個疑問:把數字弄成這個樣子,有什麼作用?

相關焦點

  • 教孩子寫遊戲:矩陣在3D遊戲編程中是如何被使用的?
    矩陣就是這樣,當時被發明出來的時候很多人並不理解,一個快速計算方法有什麼用?直到有了計算機,直到程式設計師在處理計算機3D問題時遇到了非常大困難的時候,大家才發現矩陣的真正用處——它能大大提高3D問題中複雜計算的效率。打個比方你就明白了。在電腦上運行3D程序,就好比是在路上開車。而矩陣,就相當於是一個額外的氮氣加速器。
  • 教孩子寫遊戲:3D遊戲編程的必備數學知識,理解三維空間向量
    因為我們要寫的是3D遊戲程序,所以,我們必須要接觸兩個數學方面的難點知識——向量和矩陣。有的人問:這個這麼難,我們可不可以不學?我的答案是這樣的:如果你是有心要學習本課程,那麼這個是必須要學習的,是沒有道理可講的,是想破了腦袋也要學明白的。
  • 教孩子寫遊戲:作為新手,要如何理解遊戲中的3D世界呢?
    坐標系對於你來說,是很容易理解的事情,但是,對於一個孩子來講,可能有點麻煩,所以,關於如何讓孩子更容易理解坐標系,我放在文章最後專門講解。在這裡,我先假定,你是大學本科的水平。不是所有本科生都特別明白3D坐標系的,但是,平面的2D坐標系應該都懂,否則你也考不上大學。所以,我還是先簡單說一說什麼是3D坐標系。
  • 理解矩陣背後的現實意義
    Mathematics(《數學概觀》)以及Thomas A. Garrity的《數學拾遺》都給我很大的啟發。不過即使如此,我對這個主題的認識也經歷了好幾次自我否定。比如以前思考的一些結論曾經寫在自己的blog裡,但是現在看來,這些結論基本上都是錯誤的。因此打算把自己現在的有關理解比較完整地記錄下來,一方面是因為我覺得現在的理解比較成熟了,可以拿出來與別人探討,向別人請教。
  • 昴宿二外星人訊息19:原始矩陣是什麼
    今天我們將談論你們稱之為初始矩陣或原始矩陣的東西,根據我的理解,你們也是這樣的矩陣。但首先,您如何從您的角度概括地定義矩陣?斯瓦魯:你好,戈西亞!在一組規則中的矩陣,它在一個封閉的遊戲中。就像一個有固定規則的電子遊戲。這是事實。就像你的電影《黑客帝國》一樣。這裡有更多的矩陣,但地球是矩陣中的矩陣。夢中有夢。是我搖醒了你!
  • 學習少兒編程有什麼好處?讓孩子在遊戲中思考並理解邏輯
    少兒編程的初衷是讓兒童學習和考慮基於手機遊戲的訓練。不同的實際操作構成了遊戲的整個過程,會產生不同的實際效果。設定遊戲訓練目標時,如何制定目標,這就像積木遊戲一樣,讓孩子在遊戲中思考並理解邏輯。
  • 如何理解mantel檢驗-就知道矩陣和單列變量數據的相關
    寫在前面在微生物生態學領域,經常用的mantel檢驗,原理來講,很是簡單,就是一個距離矩陣的相關分析而已,但是這層窗戶紙似乎存在很長時間,大家都對這個分析的原理有些忌憚
  • 3D遊戲編程:遊戲代碼的整體結構是什麼樣子的?
    也就是說,你能把前面17節的內容完全掌握了,你的3D遊戲編程基礎就有了,接下來再講解代碼,你就很容易明白了。從這一節開始,我們將要把整個3D遊戲示例程序的代碼講解一遍。由於有Direct3D的幫忙,我的程序代碼只有1000來行,所以,即便你是初學者,也是可以學明白這些代碼的。「學」的部分你知道一個程式設計師最煩的事情是什麼嗎?
  • 怎樣理解逆矩陣
    a/b(當b不為0的時候有意義);同理你理解逆矩陣就是與矩陣成導數關係。
  • 矩陣乘法的通俗理解
    今天先分享一下矩陣乘法的理解。一、問題引出 - 一道小學生應用題計算題一:小明今天要做飯,消耗2斤肉,1斤蔬菜。肉每斤20元,蔬菜每斤5元,則一共需多少花費?             解法: 20 X 2+ 5 X 1 = 45計算題二:小明第二天有另一種做飯的方法,需要消耗1斤肉,4斤蔬菜,那麼這兩種方法的花費各是多少呢?
  • 教孩子寫遊戲:手寫一個最最簡單的Windows程序框架
    你不用把這個集成工作環境想像地那麼難,覺得編程很高大上,然後覺得這個軟體也很高大上。如果這樣想的話,你就很難教好孩子了。編程的高難度時代已經過去,各種各樣的底層技術難題已經被我們的前輩們解決,而且很好地封裝到了各種各樣的函數中,我們只要懂得如何去使用就可以了。這一節課,我們就用這個集成工作環境寫一個Windows程序的框架。
  • 教孩子背數字≠理解數字,正確認識數學意識,學學這幾個小遊戲
    數學這門學科是很多知識的起源,從人類文明開始發展,我們生活中的很多事就都離不開數字和數學了。教孩子數數、認識數字,是孩子的「人生第一課」,這項任務一般都落在了父母身上。教孩子數數,會背「1、2、3」,但是總是不理解數字的真正含義小藝最近在教寶寶數數,每天有空就抱著孩子數「1、2、3……」,寶寶也每天跟著媽媽數「1、2、3」。
  • 如何理解人們在決策中的「矩陣」運算?
    一般意義上講,我們對世界有一個非常具體的理解。一個物體是圓形,而另一個則是方形;這個是紅色的,而另一個是黑色的……我們可以群舉一系列我們對這個世界的認識,但其實都是一些對特徵屬性的定義。我們通過對特徵屬性進行定義以獲得我們對於世界的認識,並認為這是最真實的感知。
  • 學前班遊戲開發入門4:Time.deltaTime與Unity3D中的長度單位
    但 u3d 的接口是真的不好理解,函數名也起得不好,我就不理解為什麼不直接用 move 做函數名。這個 Translate 直接就是矩陣變換的意譯,使用這個函數的人還得明白在 3d 世界中移動其實就是坐標的矩陣變換 ... ... 說實在的,沒有這個必要。函數其中的參數就更不容易為初學者理解,這移動是多少呢?
  • 如何製造一個簡單的2D遊戲?
    No.1引擎選擇當決定開發一款遊戲的時候,第一步要考慮的是遊戲引擎的選擇。所以首先要問自己一個問題:我需要用什麼遊戲引擎來開發遊戲?相對主流的兩款遊戲引擎分別是Unity和Unreal Engine4(UE4),二者各有利弊,比如Unity的3D渲染效果不如UE4,但Unity有許多插件可以使用,開發效率會更高。
  • 姿態解算進階之理解旋轉矩陣(也稱方向餘弦矩陣)
    算法類推文比技能類推文難寫,Sugar 本來想姿態解算的算法系列在入門後就不再寫了,但有讀者下載了 Sugar 在 5 篇入門系列共享的 MATLAB 代碼之後表示對其中一些方法不理解,所以 Sugar 再開個進階系列。注意:深入算法無終點,打算進階的讀者需要自行補一點數學基礎。旋轉矩陣為何五花八門關於旋轉矩陣的基本原理 Sugar 就不再重寫了,網上非常多。
  • 強大的矩陣奇異值分解(SVD)及其應用
    想玩玩戰爭遊戲,玩玩COD不是非常好嗎,玩山寨的CS有神馬意思啊。國內的網頁中的話語權也被這些沒有太多營養的帖子所佔據。真心希望國內的氣氛能夠更濃一點,搞遊戲的人真正是喜歡製作遊戲,搞Data Mining的人是真正喜歡挖數據的,都不是僅僅為了混口飯吃,這樣談超越別人才有意義,中文文章中,能踏踏實實談談技術的太少了,改變這個狀況,從我自己做起吧。
  • 仿射變換及其變換矩陣的理解(詳細解析)
    目錄寫在前面仿射變換:平移、旋轉、放縮、剪切、反射變換矩陣形式變換矩陣的理解與記憶
  • 計算思維≠編程,該如何培養孩子的計算思維?
    先有了計算思維,再運用計算機可以理解的語言和能計算的公式,編程為詳細的步驟,讓計算機進行處理要實現的目標。把實現的流程和步驟,通過計算機語言表達出來,輸入計算機系統,讓計算機可以自動運算出結果,這個過程就是編程。也就是編程是實現計算思維的一種方式。
  • 矩陣與矩陣乘積簡介
    例如,上面提到的例子位於矩陣A的第二行和第一列,因此它被表示為$A_{2, 1}$。矩陣分量可以寫如下:圖1:矩陣是二維數組,行數通常用m表示,列數用n表示。數組的形狀給出了每個維度中元素的數量,如圖1所示。由於此矩陣是二維的(行和列),因此需要兩個值來描述形狀(按此順序排列的行數和列數)。