陳俊廷
引言
在溫州中學學習生活了三年,畢業了免不了懷念。圖1是母校的標志性建筑——行政樓,別有一番氣勢。在溫州中學學習期間,我經常泡在創客空間,也接觸到很多3D打印的相關知識。畢業之際萌發了做一個學校標志性建筑模型的想法,以紀念自己難忘的高中時光,同時感謝母校為我提供了廣闊的舞臺。
建模準備階段
我最早接觸使用的3D建模軟件是Google SketchUp,類似SketchUp這類建模軟件的建模主要基于畫線成面,而后擠壓成型建立三維模型。因此它的操作就像我們使用鉛筆在圖紙上作圖一般,SketchUp軟件本身能自動識別這些線條并加以自動捕捉。這類3D建模軟件的優點就是交互式操作,效果直觀簡單。后來,我還在選修課上學習了OpenSCAD立體建模軟件,這門課是一位數學老師教的。
OpenSCAD是一款用于創建立體三維CAD對象的免費開源軟件。OpenSCAD軟件的建模是在腳本文件中描述對象,用腳本語言進行3D編譯并呈現3D模型,用戶可以在建模的過程中輕松地更改任何步驟,甚至設計所定義的配置參數。軟件的建模操作包括兩方面:一方面是利用OpenSCAD中模型的基礎組件語句,如方形、圓柱等,配置指定參數軟件轉換成對應的3D視覺模型,而不是數據模型;另一方面是利用OpenSCAD的功能語句,進行模型移動、組合、聯合、區分、交集、鏡像等操作。
但由于OpenSCAD偏于程式、參數化方面,而我又對自己的編程語言沒有足夠的信心,所以3D建模往往會選擇交互式建模軟件SketchUp。但是,在這棟樓的建模過程中,我發現大樓的建筑結構有許多重復之處,在SketchUp中操作顯得太過繁瑣,重復性的操作太多。想到OpenSCAD建模軟件的代碼建模能夠徹底解決我的困擾,不僅修改方便,并且能夠通過計算構建精確的大樓模型,于是決定選擇OpenSCAD這位久違的“老朋友”。
使用OpenSCAD建模需要提前進行計算,構思好每一個點的位置,規劃好每一個部分的大小。于是,我畫了一個行政樓的三視圖草圖,這個草圖對之后的計算很有幫助,讓建模過程也變得十分流暢。我畫的正視圖(如圖2)中包括三維空間的X軸和Z軸。在正視圖中,每一個點都標了相對應的坐標,這使得原本抽象的計算顯得比較直觀。在這個過程中,我主要選擇了原圖中比較容易實現的部分,對一些建模難以實現的部分做了相應簡化。而且鑒于學校的3D打印機只有單色打印的功能,所以忽略了顏色參數的相關設置。俗話說,磨刀不誤砍柴工。建模前期的畫圖工作不僅沒有浪費時間,反而加快了我后續的建模進程,使得建模能夠事半功倍。
建模過程
根據前期的構思,我選擇從行政樓最主體的部分開始建模。行政樓主體首先是采用一個長方體去除中部的大門部分。在OpenSCAD的建模語言中,這部分首先需要用到的是長方體語句——cube([width,height,depth]),即設置相應的長寬高作長方體。大門部分采用差集語句——difference(),即由第一個多面體去除第一個以外的多面體。相關坐標點定位和移動用的是translate([x,y,z]),即設置相應的向量參數進行模型的移動。使用OpenSCAD時特別需要注意的是cube語句的后面是帶有分號的,而translate則不需要。這也是我剛開始沒注意而常犯的錯誤。
行政樓主體部分的建模語言如下:
difference() //由第一個多面體,減去除第一個以外的多面體
{
translate([-15,-15,-2]) //依照[-15,-15,-2]向量進行平移
cube([30,45,2]); //以30,45,2作為長寬高作長方體
translate([-0.5,2,-0.8]) //依照[-0.5,2,-0.8]向量進行平移
cube([1,30,0.9]); //以1,30,0.9作為長寬高作長方體
}
行政樓主體部分建模結束之后,接下來的工作就是在原有的基礎上一點一點增加細節。在這一過程中,還需要用到OpenSCAD中的并集語句——union(),即多個多面體的總和是或運算;交集語句——intersection(),即得出多個多面體相交的部分,是與運算。模型部分還用到了柱體語句——cylinder(h,r1,r2,center),多面體語句——polyhedron(points,triangles,convexity),球體語句——sphere(radius)等。從上述部分我們也可以發現OpenSCAD的建模語言其實還是比較簡單的,大部分和英語單詞的意思相對應,理解起來十分容易。
行政樓主體部分完成之后的工作就是添加許多細節,包括窗戶、水池、樹等。當然樹的模型進行了一定的簡化,用的是兩個柱體的組合。程序語言如下:
union() //多個多面體的總和(或運算)
{
translate([2.5,2,0]) //依照[2.5,2,0]向量進行平移
cylinder(h=1.5,r1=0.15,r2=0.05,$fs=10); //以1.5作高,0.15,0.05分別為上下圓半徑作圓錐體,$fs是毫米表示角,表示周長除以數值,單位是毫米
translate([2.5,2,1]) //依照[2.5,2,1]向量進行平移
cylinder(h=1,r1=0.4,r2=0,$fs=10); //以1作高,0.4,0分別為上下圓半徑作圓錐體
}
樹的效果如圖3所示。
遇到的問題
1.行政樓頂的曲線
行政樓房頂有較大弧度的曲線(如圖4)。曲線在3D建模中一直是一個比較難處理的部分。我在SketchUp中采用的方案是利用一個圓斜截一個圓錐從而得到拋物線,再通過相應操作進行調整找到需要的弧度。但在利用OpenSCAD腳本語言建模的過程中,雖然也可以用CSG模型解決曲線的問題,但涉及的運算卻是我沒有學過的,因此,行政樓房頂的曲線弧度只能用長方體替代。
2.效果圖顯示部分
從下頁圖5的代碼輸入界面中可以看出,行政樓中間的大門和樓頂兩個長方形凹槽部分應該是被打通的。然而在效果圖顯示時,從不同的角度查看,卻有一層綠色的圖層若隱若現,時有時無,讓我比較困擾。參考OpenSCAD中自帶范例的效果圖顯示,以及咨詢老師,發現他們都沒有遇到過這種情況,效果圖顯示打通了就是顯示空白了。老師建議嘗試修改相關參數,發現只要將對應的參數稍微加大,讓其處于完全貫穿狀態,而不是恰好打通,效果圖中就不會出現這一綠色圖層。所以建議在設置OpenSCAD代碼參數時需要根據具體情況做相應計算,參數設置要合理,否則可能會影響之后的建模及效果圖呈現。圖6是修改后的代碼參數及效果圖。
3.行政樓房間
行政樓中的房間這些大量重復性的建模我采用最基礎的方法,就是在OpenSCAD中復制相應代碼,改變部分參數,操作非常便捷。其實OpenSCAD中循環語句可以更好地解決這個重復性操作的問題,在軟件的很多example中也采用了循環的方法。但是由于我對循環語句并不能嫻熟應用,只好采用復制粘貼再修改的笨辦法。但即便沒有采用循環語句,我覺得這也遠比在互動式建模軟件中大量的重復操作要快捷許多。
結束語
在OpenSCAD建模軟件的學習中,我的收獲還是很大的,不僅學會了這款免費開源的建模軟件,而且自己面對陌生事物的心態有了改變,很多事情只有著手之后才會發現遠沒有你想象的困難。
3D建模能給我帶來快樂,看著自己的想法一點點變成現實,二維的行政樓平面照片變成三維的立體模型,一種成就感油然而生,這應該也是創客動手制作的最大動力來源吧!雖然對于OpenSCAD的建模操作我只能算入門,但相信會慢慢熟練。同時,我也會去接觸和學習其他的建模軟件,因為我覺得3D打印的學習是一件充滿樂趣的事情。希望自己能從中收獲更多,也希望和大家一起交流有關OpenSCAD這款軟件的建模心得以及有關3D打印的學習體會。最后附上溫州中學行政樓模型效果圖(如圖7~圖9)。
如果對相關內容感興趣,請關注主持人博客。