天才教育網(wǎng)合作機構 > 培訓機構 >

                                                                                        天才領(lǐng)路者

                                                                                        歡迎您!
                                                                                        朋友圈

                                                                                        400-850-8622

                                                                                        全國統一學(xué)習專(zhuān)線(xiàn) 9:00-21:00

                                                                                        位置:培訓資訊 > 怎樣用scratch實(shí)現3d

                                                                                        怎樣用scratch實(shí)現3d

                                                                                        日期:2019-08-16 16:00:14     瀏覽:500    來(lái)源:天才領(lǐng)路者
                                                                                        核心提示:相信大家應該都接觸過(guò)3D游戲和3D動(dòng)畫(huà),那些栩栩如生的畫(huà)面,其實(shí)它們并不是照片,而是通過(guò)編程讓計算機實(shí)時(shí)畫(huà)(計算)出來(lái)的。下面就來(lái)說(shuō)說(shuō)怎樣用scratch實(shí)現3d,大家千萬(wàn)別錯過(guò)。

                                                                                        相信大家應該都接觸過(guò)3D游戲和3D動(dòng)畫(huà),那些栩栩如生的畫(huà)面,其實(shí)它們并不是照片,而是通過(guò)編程讓計算機實(shí)時(shí)畫(huà)(計算)出來(lái)的。下面就來(lái)說(shuō)說(shuō)怎樣用scratch實(shí)現3d,大家千萬(wàn)別錯過(guò)。 ?

                                                                                        怎樣用scratch實(shí)現3d

                                                                                        ?

                                                                                        怎樣用scratch實(shí)現3d ?

                                                                                        基本思路 ?

                                                                                        首先必須明確,3D這種東西不論那個(gè)平臺的實(shí)現(已有的3D引擎不算,我指自己編寫(xiě)一個(gè)新的3D引擎)都是需要一定的數學(xué)基礎的。如果你沒(méi)有過(guò)多的去研究數學(xué)的話(huà),我建議*(含*)以下的吧友不要闖3D領(lǐng)域,你會(huì )覺(jué)得無(wú)從下手。對于3D的研究最適合高中的吧友們,這時(shí)候不僅可以增長(cháng)編程水平,而且對你的高中數學(xué)的學(xué)習也有極大的幫助。 ?

                                                                                        對于3D的實(shí)現,最重要的是思路,公式及圖像的形成原理大家都懂,我就不普及這種基礎知識了。實(shí)現的思路有很多,這篇文章我會(huì )給你們提供我實(shí)現3D時(shí)使用的思路,并不會(huì )教你們那里怎么做哪里怎么做(這樣我不如直接放源碼出來(lái)),只是給你們一個(gè)可行的探索方向。 ?

                                                                                        接著(zhù)我們來(lái)看下一個(gè)3D實(shí)現的基礎思路,我的這個(gè)思路很像計算機成像的思路: ?

                                                                                        用戶(hù)腳本-->運算-->成像; ?

                                                                                        是不是很類(lèi)似于計算機成像; ?

                                                                                        二進(jìn)制欲顯示圖像-->GPU處理-->顯示器發(fā)光. ?

                                                                                        沒(méi)錯,就是這樣的。也就是這是我們3D成像主攻的3大塊:用戶(hù)腳本、運算、成像。我看過(guò)我們吧友的一些3D實(shí)現方法,他們都犯了一個(gè)大錯:將這3大塊揉和在了一起。這是大錯特錯的,這三大塊應該是可以分別從你的腳本中獨立出來(lái)的(也就是3個(gè)角色)。 這樣有利于對腳本的維護,學(xué)過(guò)高級語(yǔ)言的吧友們就知道了,這樣“塊”狀的腳本是特別利于開(kāi)發(fā)的。 ?

                                                                                        對于這3大塊的開(kāi)發(fā)順序應該是先開(kāi)發(fā)運算、再成像、*用戶(hù)腳本。為何這么說(shuō),拿計算機成像來(lái)看,目前的顯示器只支持GPU輸出的圖像,所以你得先研發(fā)GPU,然后GPU研發(fā)完了顯示器就順理成章了,接著(zhù)在于CPU配對接受二進(jìn)制,不然的話(huà)先給你二進(jìn)制顯示不出來(lái)有何意義?對于3D實(shí)現同理。如果你直接開(kāi)發(fā)成像你會(huì )發(fā)現你在不知不覺(jué)中也開(kāi)發(fā)了運算,然而這樣開(kāi)發(fā)出來(lái)的運算是和成像揉在一起的,違反了我們的開(kāi)發(fā)原則。 ?

                                                                                        *階段 ?

                                                                                        我們開(kāi)發(fā)的*階段運算是最難啃的,這個(gè)階段的開(kāi)發(fā)猶如混水摸魚(yú)。你并不知道你的運算結果是什么,你看不到圖像,只知道運算而得到的數字。這要求對各類(lèi)函數的確切掌握。那我們如何快速進(jìn)階呢?這個(gè)就很像矢量圖了,大家可以在此處參考矢量圖的實(shí)現。那我們要得到些什么數字?首先對于3D我們肯定得拋棄Scratch原有的二維坐標系統(xy),要自行再開(kāi)發(fā)一個(gè)三位坐標系統(xyz),這個(gè)系統里要有長(cháng)度單位、以及三維基本的三個(gè)軸。你3D里的每一個(gè)實(shí)體,都需要一個(gè)確切的坐標以及長(cháng)寬高。這是*步。第二步,你要確定一個(gè)視界與被觀(guān)察實(shí)體的相對位置及相對距離,注意實(shí)體的坐標是固定的,但是視界不是固定的,所以我們需要一個(gè)實(shí)時(shí)相對位置與相對距離算法,通過(guò)這個(gè)算法得知一些數據(至于是什么數據,就看你數學(xué)學(xué)怎么樣了)以測算角度來(lái)成像。 ?

                                                                                        例如p1(作圖抽象,請自行想象)里的正方體是實(shí)體,長(cháng)方體是你的可視范圍,那么紅線(xiàn)延長(cháng)出去的就是視界。接下來(lái)就要介入成像了。 ?

                                                                                        第二階段 ?

                                                                                        在成像方面,我比較推崇位圖式與矢量式結合的思路。矢量式描繪實(shí)體邊框,位圖式給一個(gè)面填色。矢量方面并不難,你只要運算出了關(guān)鍵數據,一根線(xiàn)(剛開(kāi)始不要介入曲線(xiàn))的長(cháng)度、大小、位置、角度自然都是可以通過(guò)公式測算的出來(lái)的。假設p2(作圖抽象,請自行想象)是我們看到的圖像,那么我們需要確定圖上幾個(gè)關(guān)鍵性的紅點(diǎn)把他們連起來(lái),如何確定這些紅點(diǎn)可以參考紅線(xiàn)(我稱(chēng)之基準線(xiàn)),確定這些在成像時(shí)沒(méi)有基準線(xiàn)就是運算要做的,這些基準線(xiàn)必須從視界的一個(gè)角出發(fā)其終點(diǎn)就是我們要的關(guān)鍵點(diǎn)。成像難在位圖式(建議大家不要馬上研究位圖式這一塊),你需要研究在Scratch里實(shí)現MS-Paint里油漆桶的方式,研究出了這個(gè),也就沒(méi)什么難的了。但是實(shí)現個(gè)看似簡(jiǎn)單的油漆桶并不簡(jiǎn)單。 ?

                                                                                        第三階段 ?

                                                                                        啃完了兩塊大難關(guān),接著(zhù)用戶(hù)腳本的研究自然就特別簡(jiǎn)單了。我們只要自定義函數后提交到運算創(chuàng )建實(shí)體,然后給成像模塊提供運算結果成像就完成了。 ?

                                                                                        ?

                                                                                        用scratch制作3d投影的步驟 ?

                                                                                        *步:在“造型”里將思思兔的造型圖片按照方向一一對應,動(dòng)作越復雜,所需圖片越多。 ?

                                                                                        第二步:設置思思兔的朝向、大小、位置。 ?

                                                                                        第三步:設置重復執行動(dòng)畫(huà)。 ?

                                                                                        第四步:見(jiàn)證奇跡的時(shí)刻,運行腳本,注意腳本命令之間不要有斷層。 ?

                                                                                        用scratch實(shí)現3D動(dòng)畫(huà)的方法 ?

                                                                                        1. 坐標 ?

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

                                                                                        3D坐標系增加了一個(gè)z軸,其實(shí)就是2D坐標在縱深方向的擴展。紅色直線(xiàn)代表x、y、z軸,黑色點(diǎn)的坐標(x,y,z)代表了它在三維立體空間中的位置。 ?

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

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

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

                                                                                        簡(jiǎn)單來(lái)說(shuō),只要我們知道了八面體的6個(gè)頂點(diǎn)的3D坐標,我們就能一筆過(guò)把它畫(huà)出來(lái)。 ?

                                                                                        2. 投射 ?

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

                                                                                        原理:視點(diǎn)代表了觀(guān)察者(眼睛或者攝像頭)的位置。藍色是一個(gè)3D物體,紅色平面代表了屏幕。綠色部分就是3D物體在屏幕上的投射。在屏幕上顯示一個(gè)3D物體,其實(shí)是顯示它在2D平面上的投射(綠色部分)。 ?

                                                                                        在屏幕上看到的一個(gè)3D物體的大小和形狀,其實(shí)跟以下幾個(gè)因素有關(guān):3D物體的實(shí)際位置、視點(diǎn)的位置、屏幕的位置。 ?

                                                                                        那3D空間某一個(gè)點(diǎn)投射在某個(gè)2D屏幕上的坐標是怎么計算的呢? ?

                                                                                        P代表3D空間中的一個(gè)點(diǎn),設它的位置坐標值是x,y,z?,F在要計算的是它在紅色的代表屏幕的平面上的投射點(diǎn)P’的坐標值。其中O點(diǎn)代表視點(diǎn)。 ?

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

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

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

                                                                                        OA /OB = AC’ / BC = P’C’ / PC ?

                                                                                        所以,如果知道: ?

                                                                                        P點(diǎn)坐標x,y,z ?

                                                                                        O點(diǎn)坐標ox,oy,oz ?

                                                                                        紅色平面的z坐標值pz ?

                                                                                        則: ?

                                                                                        OA = pz – oz ?

                                                                                        OB = z – oz ?

                                                                                        BC = x – ox ?

                                                                                        PC = y – oy ?

                                                                                        則P在紅色屏幕平面投射點(diǎn)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)] ?

                                                                                        接下來(lái)我們就用這個(gè)結論在scratch里畫(huà)出一個(gè)3D的八面體來(lái)。 ?

                                                                                        我們要做的就是把3D物體在2D屏幕上的投射畫(huà)出來(lái)。所以在畫(huà)(編程)之前我們先要在自己心中有一個(gè)3D坐標,視點(diǎn)的位置、屏幕的位置、物體的位置我們都要先想清楚。 ?

                                                                                        八面體有6個(gè)頂點(diǎn),依次連接點(diǎn)1-6-2-5-3-6-4-5-1-2-3-4-1就可以一筆過(guò)畫(huà)出它來(lái); ?

                                                                                        - 首先我們用三個(gè)數組分別保存八面體6個(gè)頂點(diǎn)的x坐標、y坐標和z坐標; ?

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

                                                                                        - 根據前面3D到2D屏幕的投射公式,自定義一個(gè)積木用來(lái)投射轉換; ?

                                                                                        - 接下來(lái)就依次投射1-6-2-5-3-6-4-5-1-2-3-4-1點(diǎn),用畫(huà)筆畫(huà)出連接各點(diǎn)的軌跡。 ?

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

                                                                                        3. 移動(dòng) ?

                                                                                        物體移動(dòng)只需要改變它所有頂點(diǎn)的x,y,z值,然后再重新投射一次就可以了。 ?

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

                                                                                        物體在z軸方向的移動(dòng)會(huì )產(chǎn)生物體大小變化的視覺(jué)效果:物體遠離視點(diǎn)時(shí)物體投射縮小,接近視點(diǎn)時(shí)物體投射增大。 ?

                                                                                        4. 旋轉 ?

                                                                                        物體旋轉涉及到三角函數的知識。推導過(guò)程需要一定的篇幅。我們只需要記住簡(jiǎn)單的結論來(lái)應用就可以了。 ?

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

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

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

                                                                                        新的z坐標 = z * cos A – y * sin A。 ?

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

                                                                                        新的x坐標 = x * cos A – z * sin A; ?

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

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

                                                                                        新的x坐標 = x * cos A – y * sin A; ?

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

                                                                                        顯示了沿z軸旋轉時(shí)的變換情況。有興趣的同學(xué)可以自己推導出坐標的變換規律。 ?

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

                                                                                        如果本頁(yè)不是您要找的課程,您也可以百度查找一下:

                                                                                        奇米在线7777在线精品|国产成人精品免费视|精品无码不卡一区二区三区|国内综合精品午夜久久资源|亚洲视频在线观看..