使用threejs點雲秀出酷炫的模型效果
阿新 • • 發佈:2019-02-14
前幾次用點雲去擺放實現圖片的效果,這次我決定用點雲實現一些模型效果。首先我們知道WebGL底層繪製方式有三種,分別是點繪製,三角形面繪製和線繪製。在threejs中我們可以方便地通過THREE.PointsMaterial設定使用點繪製方式(當然還有THREE.LinesMaterial是專門畫線的)。
然後我將我們需要實現的效果分成了四步
1.建立或載入我們轉換使用的geometry物件A,B,C(頂點數A>B>C)
2.將網格物件以點的方式繪製出來。
3.將A頂點比B頂點多出的部分進行處理
4.通過Tween.js這個間補動畫庫進行變換
這裡主要的難點就是集中在步驟3上,之前我做過一次頂點位置的轉換,兩邊的頂點數是完全相同的,然而我又想到了兩種情況:
1.A頂點數>B
2.A頂點數<B
因為在對頂點進行操作時使用的是強型別陣列Float32Array,必須在初始化時就確定陣列的長度,所以不能輕易修改,也就是說如果從頂點少的mesh轉換到頂點多的mesh必然會有一部分模型覆蓋不到。
但是第二種情況,我們可以通過將A頂點陣列中多出的部分重複放置到B的頂點位置,也就是說從A轉換成B的過程中可能會有很多點疊在一起,但是在視覺效果上還是很好的,下面貼上轉換部分的程式碼:
//創造符合條件的points陣列 //con_1要轉換的陣列 //con_2需要製造的陣列 //con_2陣列資料 function convertGeo(con_1, con_2, con_2_data) { if(con_1.length > con_2_data.length) { var len = con_1.length - con_2_data.length; for (var i = 0; i < con_2_data.length; i++) { con_2[i] = con_2_data[i];還有一點要說的就是之前我都是自己寫的間補動畫,但是要寫好的效果十分複雜,後來我發現了Tween.js這個庫,用起來十分簡單方便,有問題的自己查查原始碼也就ok了~所以說當自己需要實現一些功能時,可以找找有沒有現成的庫來用,當然,有空的時候還是要多研究研究原始碼~} for (var j = 0; j < len; j++) { con_2[j + con_2_data.length] = con_2[j]; } } }
圖片效果(變化過程中的圖片,還是下載下來好看效果):
Github:https://github.com/StringKun/ThreeJSPotCloud/tree/master/potcloud3