數(shù)百個HTML5例子學(xué)習(xí)HT圖形組件 – 3D建模篇
http://www.hightopo.com/demo/...
《數(shù)百個 HTML5 例子學(xué)習(xí) HT 圖形組件 – WebGL 3D 篇》里提到 HT 很多情況下不需要借助 3Ds Max 和 Blender 等專業(yè) 3D 建模工具也能做出很多效果,例如 http://www.hightopo.com/guide... 這個 3D 電信機(jī)房監(jiān)控例子整個都是通過 HT 提供的 API 構(gòu)建而成:
不過這個例子中的模型都比較規(guī)矩,也就消防栓由一個球 + 圓通構(gòu)成,其他圖形通過 HT 提供的基本 Node 以及 Shape 對象即可搞定:
但這并不意味著 API 只能做簡單的模型,《HT for Web 建模手冊》中介紹的 HT 建模插件可以讓有想象力的同學(xué)做出各種不可思議的效果。例如這個餐座椅的例子:http://www.hightopo.com/guide...
對于這個餐座椅的例子,特別是一些不規(guī)則的花盆、酒杯、圣誕樹和那顆愛心,很多人好奇我們是怎么搞出來的。其實蠻簡單,就用了《HT for Web 建模手冊》中的 createRingModel 和 createExtrusionModel 兩個構(gòu)建模型的函數(shù),其中 createRingModel 顧名思義用來構(gòu)建圍繞一圈的環(huán)狀模型,createExtrusionModel 用來構(gòu)建基于某個形狀的凸出效果,這兩個函數(shù)生成的 3D 模型都是靠平面的 2D 圖形衍生而來,都是靠 HT 系統(tǒng)中構(gòu)建 2D 不規(guī)則多邊形時采用的 Points 和 Segments 兩個數(shù)組參數(shù)搞定, Points 和 Segments 的意義可參考 《HT for Web 形狀手冊》:
可生成不規(guī)則的 3D 地板:http://www.hightopo.com/guide...
可生成不規(guī)則的 3D 管線:http://www.hightopo.com/guide...
這樣大家應(yīng)該理解了原理,但餐座椅的那幾個不規(guī)則形狀的 magic 參數(shù)是如果得來的呢,這還是得借助輔助工具:http://www.hightopo.com/demo/...,
這個工具多年前為寫例子隨意搞的,代碼挺簡單大家直接看 http://www.hightopo.com/demo/... 源代碼即可,寫的比較簡陋但挺實用,如何導(dǎo)出?打開控制臺,自己打印出 shape 對象的 sements 和 points 參數(shù)即可,或等我有空了再來寫個可導(dǎo)入導(dǎo)出更完整的例子,或者 you can you up?
其實也不僅僅也用于 Node 節(jié)點類型對象的建模,對于連線其實也可以用模型來搞定,例如 http://www.hightopo.com/guide... 這個 3D 彈力拓?fù)鋱D例子,很多人已經(jīng)覺得挺酷炫了,但我一直對這呆板規(guī)矩的管道連線很不爽,于是突發(fā)奇想搞了個像狗骨頭似的兩頭粗中間細(xì)的連線效果,整個 3D 拓?fù)鋱D例子一下子高大上了許多:
http://www.hightopo.com/demo/...
這個例子原理是這樣的,將連線 Edge 設(shè)置成透明不可見的,然后針對每個 Edge 對應(yīng)一個 Node 節(jié)點,這個節(jié)點的形狀就是被拉伸并定位到連線位置替代連線來顯示,而 Node 圖形在還沒拉伸之前長得如下:
這里還有個細(xì)節(jié)是通過 createMatrix 函數(shù),為每個管線設(shè)置一個指向兩節(jié)點位置的矩陣坐標(biāo)變換參數(shù)到 style 的 mat 屬性上,矩陣預(yù)算不理解也沒關(guān)系,直接照抄例子中代碼即可,為了方便大家理解我搞了個兩個節(jié)點一條連線更簡單的例子供參考:
今天只是拋磚引玉,《HT for Web 建模手冊》中還有眾多 API 函數(shù),只要有想象力還可以折騰出無數(shù)的花樣,后續(xù)有空我再借助 HT for Web 的 WebGL 3D 自定義建模功能多搞些實用的例子。