當前位置:
首頁 > 最新 > Scratch中究竟如何實現3D

Scratch中究竟如何實現3D

基本思路

首先必須明確,3D這種東西不論那個平台的實現(已有的3D引擎不算,我指自己編寫一個新的3D引擎)都是需要一定的數學基礎的。如果你沒有過多的去研究數學的話,我建議初二(含初二)以下的吧友不要闖3D領域,你會覺得無從下手。對於3D的研究最適合高中的吧友們,這時候不僅可以增長編程水平,而且對你的高中數學的學習也有極大的幫助。

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

接著我們來看下一個3D實現的基礎思路,我的這個思路很像計算機成像的思路。

用戶腳本-->運算-->成像

是不是很類似於計算機成像?

二進位欲顯示圖像-->GPU處理-->顯示器發光

沒錯,就是這樣的。也就是這是我們3D成像主攻的3大塊:用戶腳本、運算、成像。我看過我們吧友的一些3D實現方法,他們都犯了一個大錯:將這3大塊揉和在了一起。這是大錯特錯的,這三大塊應該是可以分別從你的腳本中獨立出來的(也就是3個角色)。 這樣有利於對腳本的維護,學過高級語言的吧友們就知道了,這樣「塊」狀的腳本是特別利於開發的。

對於這3大塊的開發順序應該是先開發運算、再成像、最後用戶腳本。為何這麼說,拿計算機成像來看,目前的顯示器只支持GPU輸出的圖像,所以你得先研發GPU,然後GPU研發完了顯示器就順理成章了,接著在於CPU配對接受二進位,不然的話先給你二進位顯示不出來有何意義?對於3D實現同理。如果你直接開發成像你會發現你在不知不覺中也開發了運算,然而這樣開發出來的運算是和成像揉在一起的,違反了我們的開發原則。

第一階段

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

例如p1(作圖抽象,請自行想像)里的正方體是實體,長方體是你的可視範圍,那麼紅線延長出去的就是視界。接下來就要介入成像了。

P1

第二階段

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

P2

第三階段

啃完了兩塊大難關,接著用戶腳本的研究自然就特別簡單了。我們只要自定義函數後提交到運算創建實體,然後給成像模塊提供運算結果成像就完成了。

後言

3D的實現方法聽起來是簡單的,但這也經過了我1年的探索而得。我也在Scratch官網發布了我最終的成果:一個完整的3D引擎。當時收到全社區的推崇並登上了首頁,我並不打算給你們作品鏈接,因為中國人(我剛開始編程也是這樣的)特別喜歡複製粘貼,然而這並不利於編程的學習,我並不想害了你們。我研究3D的時候連思路都沒人給我。

接下來祝大家研究有成,大家再不知道什麼時候發的下篇文章見。

領導說了!

您點一個

小編的工資漲5毛!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

秋冬就要穿亮色毛衣,讓你由內到外充滿色彩!
親愛的,願這世界從此溫柔待你

TAG:全球大搜羅 |