3D建模與運算思維

課程總覽


學校日簡報

學校日簡報六年級下學期

單元一:電腦遊戲創作

電腦遊戲是遊戲的一種,而遊戲的主要成份有目的、規則、挑戰及互動,這些成分可以統稱為「遊戲性」。遊戲性就是一個遊戲之所以吸引人的原因,遊戲性可以帶來「脫離現實」的解放感,也導致有些人會沈溺於遊戲當中。

目的:在遊戲當中,我們都有明確性的目標。而在平時的工作和生活當中,我們未必有明確的目標,這也是很多人感到生活迷茫的原因。很多人是因為在生活當中沒有目標,所以就到遊戲這個虛擬世界裡去尋找目標。

規則:在遊戲當中,規則是相對固定的,而且你玩得越久,對規則就把握得越好遊戲規則是公平的,只要努力總能獲得相應的回報。而在現實社會當中,卻未必都有公平的規則。

互動:只要玩遊戲就會有相應的收穫,例如:稱號、級別、得分、進度條金幣裝備。人與遊戲的互動,都是可以預期結果的。而現實世界卻不是可以預測的

挑戰:所有遊戲都是自願參與的,當面對困難的挑戰時自己可以隨時退出,就算失敗了還可以重新挑戰,有充分的自主權。而現實生活卻不是這樣,總是有許多迫於無奈的事情,而且常常失敗了就沒機會重來。

以遊戲設計的角度來看,電腦遊戲可以簡單分成三個最基礎部分:遊戲內容contents)、核心玩法core gameplay和遊戲系統game system

遊戲內容是指遊戲的故事背景、環境設定、角色設計、配樂、音效、視覺藝術...等等內容,也就是遊戲所具備的文學與藝術成分。

核心玩法是指人與遊戲互動的方式,不同的玩法也會產生不同的遊戲類型,例如:探索、戰鬥、生產、建設、冒險任務、行商、歷史模擬......等等。

遊戲系統是指為了支持核心玩法所設計出來的遊戲機制,例如:探索時的地圖迷霧系統(沒去過的地方在地圖上只看到霧)、戰鬥時的勝負系統、生產時的環境適性加值系統、建設時的資材消耗系統......等等。

在這個單元我們要設計的是動作遊戲「敲磚塊」,遊戲規則如下:

目的:消除所有的磚塊

規則:控制反射板將鋼珠彈到空中撞擊磚塊,磚塊就會消失,清除所有磚塊就過關,如果沒接到鋼珠,遊戲就結束

互動:鋼珠擊中反射板的位置不同,反彈角度就不同,也可以想成反射板中間彈性最好,兩邊彈性較差,玩家透過練習可以控制鋼珠反彈到自己想要的角度,發展出遊戲技巧。

挑戰:遊戲中鋼珠速度會突然變快或突然變慢,考驗玩家的反應能力。不同關卡也有不同難度設計,例如:磚塊較多,排列較不規則。磚塊本身堅固程度也有不同,有的磚塊要敲兩次才會消失,有的磚塊敲不破。

從遊戲設計觀點來看,「敲磚塊」遊戲的三個基礎部分:

遊戲內容:必須要想一個故事來說明遊戲的背景,同時故事也決定了遊戲場景、提示訊息的樣式。

核心玩法:這是動作遊戲,玩家須擁有三項能力:預測鋼珠的位置、滑鼠控制能力、即時反應能力。

遊戲系統:已經在遊戲規則中討論過了,包含:速度突然變化、特殊磚塊設計、關卡難度增加...等要素。

佈置場景與角色

繪製舞台背景

新增鋼珠角色

新增反射板角色

新增磚塊角色

操控與反彈

發射鋼珠

控制反射板

遊戲「全域變數

計算反彈角度

反彈程式

防止鋼珠卡在反射板上

變更音效

勝負判斷

本體與分身

分身是本體的複製版本,跟直接複製角色不一樣的地方有三個:

為了在分身與本體之間分配程式碼,請使用「當分身產生時」積木,把程式碼指派給分身執行(本體不會執行這一段程式)。要給本體執行的程式,請使用「當綠旗子被點擊」積木(分身將不會執行這一段程式)。如果使用「當收到訊息...」積木,則無論本體或分身都會執行該程式。

「分身刪除」積木的作用是將自已刪除,所以必須分配給分身執行才會有效果。如果以後還會用到這個分身,可以直接使用「隱藏」積木,而不需要刪除,等到要用到時再「顯示」就可以了。如果確定不會再用到它,則可以在遊戲結束之前直接刪除,以便進一步減少記憶體的使用量。

佈置關卡

Scratch 舞台大小為 480 * 360,下半個螢幕用來發射鋼珠和控制反射板,磚塊放置於螢幕上半部,也就是說有 480 * 180 的空間可以佈置關卡。由於磚塊的大小是 48 * 24,可以佈置一列 10 個磚塊共七列,合計 70 個磚塊,如下圖:

為了方便排列關卡,我們需要建立兩個變數「行」、「列」,這兩個變數都是「私有變數」。

放置磚塊

放置多個磚塊

排列關卡

磚塊的分身程式

被鋼珠擊中的音效

多方向的反彈判斷

建立碰撞偵測遮罩

碰撞偵測

關卡控制

為了讓遊戲擁有超過一個以上的關卡,需要修改以下程式:

配合舞台主程式的修改,將「磚塊」和「鋼珠」程式也修改如下:

5. 點選反射板角色,打開程式分頁。

6. 將主程式分成兩支,如右圖。

7. 將迴圈「重複無限次」改為「重複直到磚塊數量等於0」

以上遊戲修改完成後,程式流程改變為:

製作第二關和第三關

新增造型

修改磚塊程式

佈置第二關和第三關

修改舞台主程式

提示與過關訊息製作

新增字幕角色

新增字幕配樂

字幕動畫

開場字幕

試玩與難度調整

試玩之後,如果覺得遊戲太難過關或是太容易過關,可以怎麼調整呢?

萬一鋼珠呈現水平一直線,只能左右來回移動時,怎麼辦?

可以在鋼珠角色中加入角度變化程式,當玩家按下空白鍵時,讓鋼珠稍微向左或向右傾斜。

單元二:立體建模

三維座標系

在幾何學概念中,「點」是不佔有空間的,僅用來表示「位置」,所以是 0D。「線」是點運動的軌跡,除了位置之外還佔有長度空間,稱為 1D。將線連續排列在一起形成「面」,除了在立體空間的位置外,還佔有長、寬兩種空間,也就是 2D,而「體」則是將面疊在一起而有了高度,因此稱為 3D。

三維座標系即三維空間座標系統,使用三個參數來標示三維空間中的每一個點,右圖是常用的直角座標系,分別用 X、Y、Z 代表三維,而 x、y、z 則是點(x,y,z)與原點 O 在三維上面的距離。

利用電腦來表示 3D 物體的方法就是建立 3D 模型,要將 3D 模型顯示在 2D 螢幕上,需要運用「投射」數學對 3D 模型進行演算,稱為「算圖」(render)。

投射數學源於文藝復興時期的畫家「達文西」所發明的「透視法」,是一種把立體三維空間的形象表現在二維平面上的繪畫方法。達文西是一個博學者:在繪畫音樂建築數學幾何學解剖學生理學動物學植物學天文學氣象學地質學地理學物理學光學力學發明土木工程等領域都有顯著的成就。

取自維基百科

三視圖

除了「透視法」以外還有另外一種將立體投影成平面的方法,稱為「三視圖」。當我們觀察一個物體時,隨著觀測者位置的不同會有上面、下面、左面、右面、面、後面共六個角度,將看到的物體輪廓測量繪製出來的圖形稱為「視圖」,由於上、下視圖方向相反但圖形相同,左、右視圖和前、後視圖也是如此,因此可以把六個視圖歸納成兩個兩個一組,上視圖和下視圖合稱「俯視圖」,左視圖和右視圖合稱「側視圖」,前視圖和後視圖合稱「正視圖」,這三種視圖合稱「三視圖」。

下圖取自國家教育研究院「三視圖-從哪裡看?」教師手冊,請仔細觀察圖表,是否有發覺「透視圖」與「三視圖」之間的關係呢?

視錯覺,是指透過幾何排列、視覺成像規律等手段,製作有「視覺欺騙」成分的圖像進行眼球欺騙,引起的視覺上的錯覺,達到藝術或者類似魔術般的效果。當我們觀察立體圖形時,兩隻眼睛的可視範圍合起來大約是 124 度左右,無法同時看到圖形的左右兩側,而人類的大腦會根據有限的視覺訊息去想像和推測不足的部分,因此很容易造成視錯覺,例如:凹面看成凸面、斷裂的圖形看成是連接的......等等。

Blender

是專業的自由及開放原始碼3D電腦圖形軟體擁有極豐富的高階模組塑造功能,可用於捏塑、建立 3D 模型、材質貼圖、製作 3D 動畫......等等。

在家分作業系統安裝 Blender 軟體示範

在Windows上安裝Blender

在Mac (蘋果電腦) 上安裝 Blender

使用平板怎麼建立模型?

使用平板可以到應用程式商店搜尋「tinkercad」,雖然 tinkercad 功能比較陽春,但要拿來製作雪人模型還是很好用的。有關 tinkercad 的操作示範,請看「四年級下學期浮雕建模單元。

跟著一起做:3D建模示範操作教學影片~~堆雪人

單元三:文字型程式遊戲

什麼是程式語言?

所謂「程式語言」是指用來向電腦發出指令,讓電腦能因應不同狀況採取適當行動的「人工語言」,與自然演化而來的「自然語言」不同例如:國語、英語......等)兩者之間的差異除了產生方式不同、使用目的不同之外,主要的差異是:人工語言有嚴格的語法定義,不符合規範的語法將無法解析意義,具有「單義性」;自然語言則會根據個別使用者允許有語法、意義上的差異,這種特性稱為「多義性」。

最早的程式語言是在電腦發明之前產生的,當時是用來控制提花織布機自動演奏鋼琴的動作而在電腦發明之後,專為電腦設計的「電腦程式語言」大量出現,至今已將近有 1000 種,並且每年仍有新的電腦程式語言誕生。隨著電腦科學的發展,無論是提花織布機或自動演奏鋼琴都已經改由電腦直接控制,也因此「程式語言」通常就是指「電腦程式語言」。

自然語言是先用語音來表達語意(程式語言中稱為語義)然後才發明文字,有了文字以後才發展出文法(程式語言中稱為語法)。而程式語言則一開始就先發展語法,透過語法來定義語義。「語法」是說明程式設計語言中,哪些符號或文字的組合方式是正確的,「語義」則是對於程序的解釋。

過去學過的 Scratch 算不算是一種程式語言呢?如果從 Scratch 積木僅有「語義」沒有定義「語法」的特性來判斷,Scratch 並非傳統所說的「程式語言」,之所以沒有語法是為了避免輸入程式時會有「語法錯誤」導致程式無法正常運作,對於不熟悉程式語言的小朋友來說,要檢查出語法錯在哪裡,會是一件痛苦而且耗時的工作,也可能因此導致小朋友喪失學習興趣。

然而 Scratch 積木所堆積出來的程式是可以確實執行的,在「語義」方面是完整可行的,與傳統所說的「程式語言」並沒有不同。因此有些程式語言專家認為 Scratch 是一種「視覺化」程式語言,因為 Scratch 是透過視覺操作介面用滑鼠拖拉來寫程式,而不是用文書處理軟體(例如:記事本)來寫程式。「視覺化」程式語言只是讓小朋友在接觸真正的「程式語言」之前,培養邏輯與運算思維的工具,其最終目標是要讓小朋友熟悉「文字型」程式語言。

CodeCombat

Python 是一種擁有簡潔語法,容易理解的語言,因此非常適合作為「文字型」程式語言入門學習使用。除此之外,Java Script 也是一種適合作為入門學習的程式語言。透過遊戲方式來學習 Python(或 Java Script)是一件輕鬆又有趣的方法,特別是底下推薦的「CodeCombat」遊戲網站。

請點選右圖右上角的圖示,進入 CodeCombat 網站,然後點選「我是學生」,輸入班級代碼(由老師提供)

進入登入畫面後,請點選右下角的「Sign in with Google」按鈕,使用學校提供的學生信箱帳號密碼登入。

打開 gmail 信箱收取 CodeCombat 網站寄給你的「確認信」,並啟用帳號。

看老師示範前面 2 關並講解遊戲玩法,然後自己嘗試闖關,祝你好運囉!