国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

用Scratch做一個3D引擎

極客小將2020-11-26-
同學們應該都接觸過3D游戲和3D動畫,那些栩栩如生的畫面,大家知不知道其實它們并不是照片,而是通過編程讓計算機實時畫(計算)出來的呢?今天我們就來學習3D動畫的基本原理,以及用scratch實現3D動畫的方法。

同學們應該都接觸過3D游戲和3D動畫,那些栩栩如生的畫面,大家知不知道其實它們并不是照片,而是通過編程讓計算機實時畫(計算)出來的呢?今天我們就來學習3D動畫的基本原理,以及用scratch實現3D動畫的方法。

upload/article/images/2020-11-26/a13e3e165aa3b939bbae37bcd33fcf4a.jpg

3D是英文3-Dimension,是三維的意思的。Dimension就是維度。3D就是指長、寬、高三個維度,或者說由x、y、z三個坐標軸構成的一種空間表示方法。它們構成了一個和我們現實生活一樣的立體空間。

在計算機科學家的努力下,現代計算機3D技術已經可以達到以假亂真的效果,基本上可以純粹通過計算來精確重現現實世界或者人們想象中的場景,其精確性、真實性和無限可操作性,使得3D技術可以廣泛應用于醫學、教育、軍事、娛樂等領域。

upload/article/images/2020-11-26/714992c1ab4a9c4584bde6721acd7484.jpg

大家知道電視機、電腦顯示器、手機屏幕等實際上是2D(二維)的平面,它只有長和寬(只有x軸和y軸,沒有z軸)。要在2D平面上顯示出3D立體效果,就需要“3D引擎”,將立體物體的形狀、光線、運動等抽象成數學的表現形式,再通過計算輸出2D圖像,建立一個個真實的電腦世界。

Scratch沒有自帶的3D引擎。但是只要知道了3D動畫背后的原理,我們可以自己制作一個3D引擎出來。這就是我們一直強調的編程的好玩和強大之處:只要你學習、掌握了事物背后的原理,我們就有辦法通過編程把它模擬出來。

1.????坐標

接觸過scratch的同學對于2D坐標已經非常熟悉:一個物體的x坐標代表它在屏幕左右方向的位置,y坐標代表它在上下方向的位置。Scratch規定了舞臺的坐標范圍分別是:x坐標范圍在-240到240,y坐標范圍在-180到180。?

upload/article/images/2020-11-26/0944e115224dfd09e72745732378d7ee.jpg

3D坐標系增加了一個z軸,其實就是2D坐標在縱深方向的擴展。如下圖所示,紅色直線代表x、y、z軸,黑色點的坐標(x,y,z)代表了它在三維立體空間中的位置。

upload/article/images/2020-11-26/9e3c82ce59d8889a5659afd77206fec9.jpg

在scratch的2D舞臺上畫一個四邊形,我們需要知道四個頂點的坐標,然后把它們連線就可以畫出來。同樣道理,如果要在3D空間中畫出一個物體,一個方法是知道它的所有頂點的坐標,然后把頂點用直線連起來。比如下面這個立方體,把它的8個頂點連起來就能畫出來。

upload/article/images/2020-11-26/4eb48cc56bb1494275eb70d3ba0b686c.jpg

事實上,最復雜的3D圖案和最真實的3D動畫,背后都是通過這種方法畫出來。當然畫面細節越豐富,背后的數學模型越復雜,也需要越多的計算機資源(CPU、內存、顯卡)。作為入門介紹,本文只用最基本的3D圖形作為例子。

比如下面這個八面體,它有6個頂點,上半部分和下半部分分別有四個三角形。它是最簡單的可以一筆畫出來的多面體(上面的立方體就不能一筆畫出來,而八面體可以,同學們可以思考一下為什么),比如依次連接點1-6-2-5-3-6-4-5-1-2-3-4-1就可以不重復任一條邊把它畫出來。

簡單來說,只要我們知道了八面體的6個頂點的3D坐標,我們就能一筆過把它畫出來。

upload/article/images/2020-11-26/f09e79c13c3313b818796ebd7785193d.jpg

2.????投射

計算機屏幕是一個2D的平面,我們通過屏幕看到的3D物體,實際上是它根據透視原理在屏幕上的一個2D投射。

下圖說明了這個原理:視點代表了觀察者(眼睛或者攝像頭)的位置。藍色是一個3D物體,紅色平面代表了屏幕。綠色部分就是3D物體在屏幕上的投射。在屏幕上顯示一個3D物體,其實是顯示它在2D平面上的投射(綠色部分)。?

upload/article/images/2020-11-26/bb7a0fee4b9aeee7f857c4618cd31d4c.jpg

根據上圖可以知道,我們在屏幕上看到的一個3D物體的大小和形狀,其實跟以下幾個因素有關:

  • 3D物體的實際位置

  • 視點的位置

  • 屏幕的位置

那3D空間某一個點投射在某個2D屏幕上的坐標是怎么計算的呢?請看下圖:

upload/article/images/2020-11-26/3a2c68964c7e940c118ef85fbbd300be.jpg

上圖中P代表3D空間中的一個點,設它的位置坐標值是x,y,z。現在要計算的是它在紅色的代表屏幕的平面上的投射點P’的坐標值。其中O點代表視點。

兩次強調,3D點的投射除了和它本身的坐標有關之外,還和視點位置、投射屏幕位置有關。這三個因素是互相影響的。忽略了任何一個因素都不能得出投射點坐標!

上圖中綠色平面代表P經過的、和紅色屏幕平面平行的一個平面。線段OAB和紅色以及綠色平面都垂直。為了方便計算,我們讓紅色平面與x軸和y軸組成的平面平行。這樣,線段OAB和z軸平行(并垂直于紅色及綠色平面);線段BC以及AC’與x軸平行;線段PC以及P’C’與y軸平行。

因為BC與AC’平行、PC與P’C’平行。根據相似三角形的特點,我們很容易知道:

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)]

接下來我們就用這個結論在scratch里畫出一個3D的八面體來。

Scratch的2D舞臺就是上面圖中的紅色屏幕,我們要做的就是把3D物體在2D屏幕上的投射畫出來。所以在畫(編程)之前我們先要在自己心中有一個3D坐標,視點的位置、屏幕的位置、物體的位置我們都要先想清楚。

upload/article/images/2020-11-26/d49bf96c3748b502b49401b92550a366.jpg

八面體有6個頂點,如下圖依次連接點1-6-2-5-3-6-4-5-1-2-3-4-1就可以一筆過畫出它來:

upload/article/images/2020-11-26/f09e79c13c3313b818796ebd7785193d.jpg

-????? 首先我們用三個數組分別保存八面體6個頂點的x坐標、y坐標和z坐標:

upload/article/images/2020-11-26/10ff116f176c2558a375da96325ad97e.jpg

-????? 定義視點及投射屏幕平面的位置(前面說過,為了方便計算,我們讓投射平面與x軸和y軸組成的平面平行,所以投射面只有一個z值)

upload/article/images/2020-11-26/cd5b1c6d1d5393c169cde75545ee2fa5.jpg

-????? 根據前面3D到2D屏幕的投射公式,自定義一個積木用來投射轉換:

upload/article/images/2020-11-26/6b89940ead53f065f4d7713077236f39.jpg

-????? 接下來就依次投射1-6-2-5-3-6-4-5-1-2-3-4-1點,用畫筆畫出連接各點的軌跡。

upload/article/images/2020-11-26/9134a365a37a5339dab0529dd5919655.jpg

執行“投射八面體“積木就可以畫出下面的形狀:

upload/article/images/2020-11-26/9bc0c59a8e0dd1b7fbab34becd472bfc.jpg

3.????移動

?

物體移動只需要改變它所有頂點的x,y,z值,然后再重新投射一次就可以了。實現程序如下:

upload/article/images/2020-11-26/019b24cea6868fe4d1430fa2b96243f8.jpg

注意這里物體的移動是在原3D空間的移動,所以物體在x軸方向或y軸方向移動后,在屏幕上的投射會產生一定的旋轉效果。視點離投射平面越近,這種旋轉效果越明顯。

物體在z軸方向的移動會產生物體大小變化的視覺效果:物體遠離視點時物體投射縮小,接近視點時物體投射增大。原理如下圖所示:

?

upload/article/images/2020-11-26/5a6f63700cf9db2bcd5358d16f4524c7.jpg

移動的效果如下:

https://cdn.china-scratch.com/timg/191106/1552116331-17.gif

4.????旋轉

物體旋轉涉及到三角函數的知識。推導過程需要一定的篇幅。我們只需要記住簡單的結論來應用就可以了。

旋轉可以分為三種:沿x軸的旋轉、沿y軸的旋轉和沿z軸的旋轉。

-????? 沿x軸旋轉時,物體的x坐標不變,y坐標和z坐標的變換規律是(A為旋轉角度):

新的y坐標 = y * cos A + z * sin A

新的z坐標 = z * cos A - y * sin A

-????? 沿y軸旋轉時,物體的y坐標不變,x坐標和z坐標的變換規律是(A為旋轉角度):

新的x坐標 = x * cos A - z * sin A

新的z坐標 = x * sin A + z * sin A

-????? 沿z軸旋轉時,物體的z坐標不變,x坐標和y坐標的變換規律是(A為旋轉角度):

新的x坐標 = x * cos A - y * sin A

新的y坐標 = x * sin A + y * cos A

下圖顯示了沿z軸旋轉時的變換情況。有興趣的同學可以自己推導出坐標的變換規律。

upload/article/images/2020-11-26/896cb1c776dc54513c53dc6777429727.jpg

注意上面說的坐標變化都是物體原3D坐標的變化,而不是投射在2D平面上的投射坐標的變化。換言之,旋轉改變物體坐標后,還要重新計算投射坐標。

旋轉的實現方法:

upload/article/images/2020-11-26/588962f583511e176f015a72479fae2c.jpg

upload/article/images/2020-11-26/06dbfdbcbc4a9450413edc4215b920f3.jpg

效果如下:

https://cdn.china-scratch.com/timg/191106/15521130b-21.gif

本文原程序可以在這個鏈接找到:

https://scratch.mit.edu/projects/282534568/

再給大家分享一個3D煙花動畫,主要也是運用了本文介紹的方法制作的3D效果。具體的制作方法有時間再給大家分享。

https://scratch.mit.edu/projects/282581016/https://cdn.china-scratch.com/timg/191106/15521211J-22.gif

5.????結語

今天我們學習了基本的3D引擎制作方法。當然這是最最基本的3D知識,大家看到,即使是最基本的3D原理,已經用到不少的幾何和三角函數知識。對有志于研究最新3D技術的同學,比如3D游戲、VR(Virtual Reality虛擬現實)、AR(Augmented Reality增強現實)、3D打印等等,請進一步打好數學和編程基礎。

事實上3D等圖形顯示技術屬于一門叫做計算機圖形學的學科。計算機圖形學可以幫助人腦從圖形圖像的角度理解事物本質。在科學、娛樂、藝術、設計等領域,計算機圖形學都起著重要的基礎作用。期待有志于此的千里馬學員以后能創造出一個又一個的視覺奇跡。

https://cdn.china-scratch.com/timg/191106/1552124O2-23.jpg

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

        男女视频在线观看网站| 15—17女人毛片| 久久久性生活视频| 美女福利视频在线| 国产免费中文字幕| 日韩av高清在线看片| 超碰97免费观看| 一女被多男玩喷潮视频| 国产午夜伦鲁鲁| 五月天开心婷婷| 成年丰满熟妇午夜免费视频| 国产精品第12页| 欧美性猛交内射兽交老熟妇| 91视频免费版污| 嫩草影院中文字幕| 久久婷婷中文字幕| 成年网站在线播放| 亚洲乱码中文字幕久久孕妇黑人| 亚洲一区二区三区四区精品| 国产高清精品软男同| 少妇人妻大乳在线视频| 色婷婷一区二区三区在线观看| 北条麻妃在线视频观看| 国产成人艳妇aa视频在线| 国产精品嫩草影院8vv8 | 国产精品v日韩精品v在线观看| av动漫在线免费观看| 美女av免费观看| 97碰在线视频| av免费中文字幕| 久久久久久蜜桃一区二区| 中日韩av在线播放| 日韩国产精品毛片| 97视频久久久| 成人亚洲视频在线观看| 亚洲国产日韩欧美在线观看| 国产毛片久久久久久| 免费观看中文字幕| 日韩精品一区二区三区久久| 国产男女无遮挡| 久久久精品高清| avav在线播放| 亚洲国产成人va在线观看麻豆| 男女激烈动态图| 国产亚洲天堂网| 国产经典久久久| 视色视频在线观看| 久久九九国产视频| 成人黄色片免费| 久久久久久久少妇| 国内少妇毛片视频| 亚洲综合欧美在线| 日韩 欧美 高清| 成熟丰满熟妇高潮xxxxx视频| 国产亚洲视频一区| 午夜dv内射一区二区| 麻豆一区二区三区在线观看| 免费激情视频在线观看| 久久亚洲精品无码va白人极品| 午夜免费看视频| 九九热免费精品视频| 浮妇高潮喷白浆视频| 波多野结衣av一区二区全免费观看| 亚洲激情在线看| 久久国产这里只有精品| 日本www.色| 999在线精品视频| 激情 小说 亚洲 图片: 伦| 国产精品99久久免费黑人人妻| 欧美在线观看www| 2022亚洲天堂| 欧美日韩亚洲自拍| 在线视频观看一区二区| 中文字幕第三区| 日韩黄色片在线| 熟妇人妻va精品中文字幕| 性猛交ⅹ×××乱大交| 亚洲天堂网2018| 日韩欧美猛交xxxxx无码| 日本a级片免费观看| 欧美特级aaa| 欧洲xxxxx| 日韩在线第三页| 日本丰满少妇黄大片在线观看| 久久综合久久网| 国产3p在线播放| 久久久一本二本三本| 特级毛片在线免费观看| 久草精品在线播放| 国产片侵犯亲女视频播放| 国产精品入口免费软件| 18禁网站免费无遮挡无码中文| 亚洲美女性囗交| 极品美女扒开粉嫩小泬| 日本大胆人体视频| 亚洲综合20p| 天天色天天综合网| 污片在线免费看| 红桃av在线播放| 国产h视频在线播放| 日本一区二区三区四区五区六区| 免费一区二区三区在线观看| 2018日日夜夜| 国模无码视频一区二区三区| 国产日韩亚洲欧美在线| 蜜臀av性久久久久蜜臀av| 特级黄色录像片| 免费国产成人看片在线| 交换做爰国语对白| 国产探花在线看| 亚洲免费视频播放| 免费的一级黄色片| 97视频久久久| 午夜肉伦伦影院| 欧美伦理视频在线观看| 在线黄色免费看| 自拍偷拍21p| 国产香蕉一区二区三区| 青娱乐自拍偷拍| 超碰在线公开97| 激情视频小说图片| 内射国产内射夫妻免费频道| 天天干天天综合| 中文字幕の友人北条麻妃| 国产欧美日韩网站| 亚洲高清视频免费| 99久久免费观看| 日韩av片专区| 91免费黄视频| 国产免费色视频| 爱福利视频一区二区| 免费成人深夜夜行网站视频| 亚洲熟妇av一区二区三区| 天天综合中文字幕| 天天爽天天爽夜夜爽| www.射射射| 日本一本中文字幕| 亚洲免费视频播放| 九色porny91| 国产淫片av片久久久久久| 永久免费看av| 成人在线免费观看视频网站| 国产色视频在线播放| 成人一级片网站| 日韩欧美视频网站| 国产一区二区在线视频播放| 穿情趣内衣被c到高潮视频| 中文字幕有码av| 亚洲精品乱码久久久久久动漫| 北条麻妃视频在线| 黄大色黄女片18第一次| 无码少妇一区二区三区芒果| 北条麻妃在线视频| 国内自拍视频网| 小早川怜子一区二区三区| 免费网站在线观看黄| 91蝌蚪视频在线| av日韩在线看| 97xxxxx| 亚洲综合欧美激情| 三年中国中文在线观看免费播放| 青青在线视频免费观看| 欧美 日韩 国产一区| 爱情岛论坛成人| 日韩欧美色视频| 欧美日韩在线中文| 丰满女人性猛交| 国产真人做爰毛片视频直播| 少妇高清精品毛片在线视频| 国产精品333| 99国产精品白浆在线观看免费| 僵尸世界大战2 在线播放| 成人午夜激情av| 福利在线小视频| 国产综合免费视频| 国产人妻互换一区二区| av丝袜天堂网| 成年人网站免费视频| 一级全黄肉体裸体全过程| 欧美激情国产精品日韩| 久久综合久久久久| 污视频在线观看免费网站| 九色porny91| 97成人在线观看视频| 国产不卡一区二区视频| 国产精品99久久久久久大便| 无码少妇一区二区三区芒果| 国产黄色片免费在线观看| 自拍偷拍视频在线| 天天爽人人爽夜夜爽| 激情五月俺来也| 青青在线视频免费| 国产在线青青草| 131美女爱做视频| 日韩精品视频在线观看视频| 99精品视频网站| av 日韩 人妻 黑人 综合 无码| 香蕉视频免费版| 激情五月六月婷婷| 欧美深夜福利视频|