2022-11-21 20:29:32|已瀏覽:2075次
用scratch制作3d投影的步驟
用scratch制作3d投影的步驟第一步:在“造型”里將思思兔的造型圖片按照方向一一對應,動作越復雜,所需圖片越多。
用scratch制作3d投影的步驟第二步:設置思思兔的朝向、大小、位置。
用scratch制作3d投影的步驟第三步:設置重復執(zhí)行動畫。
第四步:見證奇跡的時刻,運行腳本,注意腳本命令之間不要有斷層。
用scratch實現(xiàn)3D動畫的方法
1. 坐標
接觸過scratch的同學對于2D坐標已經(jīng)非常熟悉:一個物體的x坐標代表它在屏幕左右方向的位置,y坐標代表它在上下方向的位置。Scratch規(guī)定了舞臺的坐標范圍分別是:x坐標范圍在-240到240,y坐標范圍在-180到180。
3D坐標系增加了一個z軸,其實就是2D坐標在縱深方向的擴展。紅色直線代表x、y、z軸,黑色點的坐標(x,y,z)代表了它在三維立體空間中的位置。
在scratch的2D舞臺上畫一個四邊形,我們需要知道四個頂點的坐標,然后把它們連線就可以畫出來。同樣道理,如果要在3D空間中畫出一個物體,一個方法是知道它的所有頂點的坐標,然后把頂點用直線連起來。比如下面這個立方體,把它的8個頂點連起來就能畫出來。
事實上,最復雜的3D圖案和最真實的3D動畫,背后都是通過這種方法畫出來。當然畫面細節(jié)越豐富,背后的數(shù)學模型越復雜,也需要越多的計算機資源(CPU、內(nèi)存、顯卡)。作為入門介紹,本文只用最基本的3D圖形作為例子。
比如下面這個八面體,它有6個頂點,上半部分和下半部分分別有四個三角形。它是最簡單的可以一筆畫出來的多面體(上面的立方體就不能一筆畫出來,而八面體可以,同學們可以思考一下為什么),比如依次連接點1-6-2-5-3-6-4-5-1-2-3-4-1就可以不重復任一條邊把它畫出來。
簡單來說,只要我們知道了八面體的6個頂點的3D坐標,我們就能一筆過把它畫出來。
2. 投射
計算機屏幕是一個2D的平面,我們通過屏幕看到的3D物體,實際上是它根據(jù)透視原理在屏幕上的一個2D投射。
原理:視點代表了觀察者(眼睛或者攝像頭)的位置。藍色是一個3D物體,紅色平面代表了屏幕。綠色部分就是3D物體在屏幕上的投射。在屏幕上顯示一個3D物體,其實是顯示它在2D平面上的投射(綠色部分)。
在屏幕上看到的一個3D物體的大小和形狀,其實跟以下幾個因素有關:3D物體的實際位置、視點的位置、屏幕的位置。
那3D空間某一個點投射在某個2D屏幕上的坐標是怎么計算的呢?
P代表3D空間中的一個點,設它的位置坐標值是x,y,z,F(xiàn)在要計算的是它在紅色的代表屏幕的平面上的投射點P’的坐標值。其中O點代表視點。
兩次強調(diào),3D點的投射除了和它本身的坐標有關之外,還和視點位置、投射屏幕位置有關。這三個因素是互相影響的。忽略了任何一個因素都不能得出投射點坐標!
綠色平面代表P經(jīng)過的、和紅色屏幕平面平行的一個平面。線段OAB和紅色以及綠色平面都垂直。為了方便計算,我們讓紅色平面與x軸和y軸組成的平面平行。這樣,線段OAB和z軸平行(并垂直于紅色及綠色平面);線段BC以及AC’與x軸平行;線段PC以及P’C’與y軸平行。
因為BC與AC’平行、PC與P’C’平行。根據(jù)相似三角形的特點,我們很容易知道:
OA /OB = AC’ / BC = P’C’ / PC
所以,如果知道:
P點坐標x,y,z
O點坐標ox,oy,oz
紅色平面的z坐標值pz
則:
OA = pz – oz
OB = z – oz
BC = x – ox
PC = y – oy
則P在紅色屏幕平面投射點P’的x、y軸坐標值為:
P’的x坐標 =
ox + AC’ =
ox + [(pz – oz) * (x - ox)/(z - oz)]
P’的y坐標 =
oy + P’C’ =
oy + [(pz - oz) * (y - oy)/(z - oz)]
接下來我們就用這個結(jié)論在scratch里畫出一個3D的八面體來。
我們要做的就是把3D物體在2D屏幕上的投射畫出來。所以在畫(編程)之前我們先要在自己心中有一個3D坐標,視點的位置、屏幕的位置、物體的位置我們都要先想清楚。
八面體有6個頂點,依次連接點1-6-2-5-3-6-4-5-1-2-3-4-1就可以一筆過畫出它來;
- 首先我們用三個數(shù)組分別保存八面體6個頂點的x坐標、y坐標和z坐標;
- 定義視點及投射屏幕平面的位置(前面說過,為了方便計算,我們讓投射平面與x軸和y軸組成的平面平行,所以投射面只有一個z值);
- 根據(jù)前面3D到2D屏幕的投射公式,自定義一個積木用來投射轉(zhuǎn)換;
- 接下來就依次投射1-6-2-5-3-6-4-5-1-2-3-4-1點,用畫筆畫出連接各點的軌跡。
執(zhí)行“投射八面體“積木就可以畫出下面的形狀:
3. 移動
物體移動只需要改變它所有頂點的x,y,z值,然后再重新投射一次就可以了。
注意這里物體的移動是在原3D空間的移動,所以物體在x軸方向或y軸方向移動后,在屏幕上的投射會產(chǎn)生一定的旋轉(zhuǎn)效果。視點離投射平面越近,這種旋轉(zhuǎn)效果越明顯。
物體在z軸方向的移動會產(chǎn)生物體大小變化的視覺效果:物體遠離視點時物體投射縮小,接近視點時物體投射增大。
4. 旋轉(zhuǎn)
物體旋轉(zhuǎn)涉及到三角函數(shù)的知識。推導過程需要一定的篇幅。我們只需要記住簡單的結(jié)論來應用就可以了。
旋轉(zhuǎn)可以分為三種:沿x軸的旋轉(zhuǎn)、沿y軸的旋轉(zhuǎn)和沿z軸的旋轉(zhuǎn)。
- 沿x軸旋轉(zhuǎn)時,物體的x坐標不變,y坐標和z坐標的變換規(guī)律是(A為旋轉(zhuǎn)角度):
新的y坐標 = y * cos A + z * sin A;
新的z坐標 = z * cos A – y * sin A。
- 沿y軸旋轉(zhuǎn)時,物體的y坐標不變,x坐標和z坐標的變換規(guī)律是(A為旋轉(zhuǎn)角度):
新的x坐標 = x * cos A – z * sin A;
新的z坐標 = x * sin A + z * sin A。
- 沿z軸旋轉(zhuǎn)時,物體的z坐標不變,x坐標和y坐標的變換規(guī)律是(A為旋轉(zhuǎn)角度):
新的x坐標 = x * cos A – y * sin A;
新的y坐標 = x * sin A + y * cos A。
顯示了沿z軸旋轉(zhuǎn)時的變換情況。有興趣的同學可以自己推導出坐標的變換規(guī)律。
注意上面說的坐標變化都是物體原3D坐標的變化,而不是投射在2D平面上的投射坐標的變化。換言之,旋轉(zhuǎn)改變物體坐標后,還要重新計算投射坐標。
注:尊重原創(chuàng)文章,轉(zhuǎn)載請注明出處和鏈接 http://www.wg4j.cn/news-id-70035.html 違者必究!部分文章來源于網(wǎng)絡由培訓無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實性請自行核實或聯(lián)系我們,了解更多相關資訊請關注少兒編程頻道查看更多,了解相關專業(yè)課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050