three.js學(xué)習(xí)3

1.粒子(也叫精靈)

我們可以使用THREE.Sprite來手工創(chuàng)建粒子炉菲,它需要傳入唯一的參數(shù)材質(zhì)(THREE.SpriteMaterial或THREE.SpriteCanvasMaterial)
THREE.Sprite于THREE.Mesh一樣叠纷,都是THREE.Oject3D的子類握截,所以THREE.Sprite可以使用THREE.Mesh的大部分屬性


1678242229488.png

使用THREE.Sprite可以很容易創(chuàng)造粒子笛谦,但是創(chuàng)造大量的THREE.Sprite時(shí),就會(huì)有嚴(yán)重的性能問題,因?yàn)槊總€(gè)THREE.Sprite對(duì)象都需要去管理彼硫,所以這時(shí)候就需要使用THREE.Points了吃溅,我們只需要使用THREE.points對(duì)象溶诞,就能夠?qū)崿F(xiàn)統(tǒng)一管理大量粒子
HTREE.PointsMaterial對(duì)象的所有可設(shè)置的屬性如下:

  • color 粒子系統(tǒng)所有粒子的顏色
  • map 可以在粒子中應(yīng)用某種材質(zhì)
  • size 指定粒子大小,默認(rèn)1
  • sizeAnnutation 如果該屬性為false决侈,那么所有粒子都將擁有相同尺寸螺垢,無論距離多遠(yuǎn),如果為true颜及,粒子大小將取決于攝像機(jī)的遠(yuǎn)近
  • vertexColors 一般來說甩苛,THREE.Points中的粒子顏色都是相同的,如果該屬性設(shè)置為THREE.VertexColors俏站,并且?guī)缀误w數(shù)組中的顏色也有值讯蒲,那么會(huì)使用數(shù)組中定義的顏色值,默認(rèn)THREE.NoColors
  • opacity 定義粒子不透明底肄扎,默認(rèn)1完全不透明墨林,與transparent,配合使用
  • transparent 如果設(shè)置為true犯祠,那么opacity生效
  • blending 指定粒子渲染的融合程度
  • fog 是否受場(chǎng)景中的霧化效果影響旭等,默認(rèn)true
在webGLRenderer中使用html5畫布

如果我們想要在WebGLRenderer中使用·canvas畫布,可以采用兩種方式衡载,可以使用THREE.PointsMaterial創(chuàng)建THREE.Points對(duì)象搔耕,或者使用THREE.Sprite和THREE.SpriteMaterial的map屬性


1678329479582.png
使用紋理化粒子

圖像樣式化粒子還可以使用THREE.TextureLoader().load()函數(shù)將圖像加載為THREE.Texture對(duì)象,然后將THREE.Texture分配給材質(zhì)的map屬性

2.幾何體的組合痰娱、合并和外部模型的加載

2-1.幾何體對(duì)象的組合

當(dāng)你創(chuàng)建多個(gè)網(wǎng)格對(duì)象時(shí)弃榨,你可以用THREE.Group將它們放到一個(gè)組中進(jìn)行管理
當(dāng)幾何體被放置在組中的時(shí)候,你可以對(duì)組進(jìn)行旋轉(zhuǎn)梨睁、平移鲸睛。縮放操作坡贺,這樣組里的所有對(duì)象都會(huì)發(fā)生變化
旋轉(zhuǎn)的中心是組的中心點(diǎn)官辈,也可以對(duì)組內(nèi)的某個(gè)對(duì)象單獨(dú)進(jìn)行操作箱舞,但是需要注意的是。所有定位拳亿、旋轉(zhuǎn)晴股、變形都是相對(duì)于父對(duì)象的

2-2.多個(gè)網(wǎng)格合并成一個(gè)網(wǎng)格

組可以管理大量網(wǎng)格,但對(duì)象·特別多的時(shí)候肺魁,性能就會(huì)到達(dá)瓶頸
因此我們可采用網(wǎng)格合并的方式队魏,來提高的性能,但合并后的網(wǎng)格就沒法操作單個(gè)網(wǎng)格進(jìn)行旋轉(zhuǎn)万搔、移動(dòng)操作
我們可以使用mergeBufferGeometries來實(shí)現(xiàn)多個(gè)mesh合并為一個(gè)mesh且可以使用多個(gè)Material

2-3.編碼時(shí)改變幾何體的位置進(jìn)行合并網(wǎng)格

使用applyMatrix4()進(jìn)行向量矩陣變換胡桨,applyMatrix4()是三維向量Vector的方法

2-4.從外部資源加載幾何體

three.js可以讀取幾種三維文本文件格式,并從中導(dǎo)出幾何體網(wǎng)絡(luò)瞬雹,支持的文件格式如下

格式 描述
json three.js自己的json文件格式昧谊,你可以用它來聲明你的幾何體和場(chǎng)景,盡管它不正式酗捌,但是非常方便你去復(fù)用復(fù)雜的場(chǎng)景和幾何體
OBJ或MTL obj是一種簡(jiǎn)單的三維文件格式呢诬,由WavefrontTechnologies創(chuàng)建,它是使用最廣泛的三維文件格式胖缤,用來定義對(duì)象的幾何體尚镰。MTL文件常同obj文件一起使用,在一個(gè)mtl文件中哪廓,obj文件用來定義對(duì)象的材質(zhì)狗唉,thre.js還有一個(gè)可定制的obj導(dǎo)出器,叫做OBJExporter.js涡真,可以將three.js中的模型導(dǎo)出一個(gè)obj文件中
Collada Collada是一種用基于xml的格式定義的數(shù)字的內(nèi)容的格式分俯,也是一種被廣泛使用的格式,三維軟件和渲染引擎都支持這種格式
STL STL是STereoLithphy(立體成型術(shù))的縮寫哆料,廣泛用于快速成型缸剪。如三維打印機(jī)的模型文件通常是STL文件。thress.js還有一個(gè)可定制的STL導(dǎo)出器东亦,叫做STLExporter.js,可以用來將three.js中的模型導(dǎo)出
CTM ctm是openCTM的一種文件格式杏节,可以用來壓縮格式存儲(chǔ)三維網(wǎng)格的三角形面
VTK vtk是由Visualization Toolkit創(chuàng)建一種文件格式,用來指定頂點(diǎn)和面典阵,vyk有兩種格式:二進(jìn)制
AWD 一種用于三維場(chǎng)景的二進(jìn)制格式奋渔,通常與away3d(away3d是falsh或flex上一個(gè)功能強(qiáng)大且實(shí)時(shí)的3D引擎,具有快速萄喳、高效卒稳、api清楚等優(yōu)點(diǎn)蹋半,但是會(huì)有三角型消失的問題)引擎一起使用他巨,這個(gè)加載程序不支持壓縮的AWD文件
Assimp Open asset import library(也稱為Assimp)是一種導(dǎo)入各種三維模型格式的標(biāo)準(zhǔn)方法
VRML VRML(Virtual Reality Modeling Language)是一種基于文本的格式,允許定義三維對(duì)象和世界
Babylon 一個(gè)三維javascript游戲庫(kù),它以自己內(nèi)部格式存儲(chǔ)模型
PDB 由Protein Data bank(蛋白質(zhì)數(shù)據(jù)銀行)創(chuàng)建染突,用于定義蛋白質(zhì)的形狀
PLY 這種格式的全稱是(Polygon)文件格式捻爷,通常用來保存三維掃描儀的信息
TDS Autodesk 3DS格式
3MF 3MF是3d打印的標(biāo)準(zhǔn)格式
AMF AMF是另一種3D打印的標(biāo)準(zhǔn)格式
PlayCanvas PlayCanvas是一款基于WebGL的開源游戲引擎,three.js可以加載基于該引擎的模型并在場(chǎng)景中使用
Draco Draco格式可以高效的保存幾何體和點(diǎn)云
PEWM PRWM(Packed Raw WenGL Model)WebGL模型原始數(shù)據(jù)包份企,這是一種專注于高效存儲(chǔ)和解析3D幾何體的模式
GCODE GCODE是計(jì)算機(jī)程序與3D打印機(jī)和CNC機(jī)器通信的標(biāo)準(zhǔn)模式之一也榄,打印模型時(shí),計(jì)算機(jī)可以向3D打印機(jī)發(fā)送GCODE命令來控制打印機(jī)
NRRD NRRD是一種存儲(chǔ)體素?cái)?shù)據(jù)的文件格式司志,它可以用于保存CT掃描數(shù)據(jù)
SVG SVG是一種矢量圖形的標(biāo)準(zhǔn)格式甜紫,它可以被three.js加載器加載成Path對(duì)象,該對(duì)象可以被拉伸成3D幾何體骂远,也可以被當(dāng)做2D幾何體來渲染
2-4-1.使用JSON保存和加載模型
//保存模型囚霸,將場(chǎng)景中的對(duì)象轉(zhuǎn)換成json
scene.toJSON()
//將內(nèi)容轉(zhuǎn)換成JSON對(duì)象,然后使用ObjectLoader對(duì)象例的方法激才,將對(duì)象轉(zhuǎn)換成three.js可以識(shí)別的模型對(duì)象
let loader = new ObjectLoader()
let obj = loader.parse(json數(shù)據(jù))
2-4-2.引用obj

使用OBJLoader加載OBJ模型

注:three.js模型導(dǎo)入obj404報(bào)錯(cuò),因?yàn)閕is缺少M(fèi)IMI的文件映射
打開IIS拓型,點(diǎn)擊MIME類型,把obj添加進(jìn)去類型直接設(shè)置成text/html就可以了

3.three.js動(dòng)畫

3-1.簡(jiǎn)單動(dòng)畫

通過使用requestAnimationFrame修改物體的屬性來實(shí)現(xiàn)動(dòng)畫

3-2.復(fù)雜動(dòng)畫
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘸恼,一起剝皮案震驚了整個(gè)濱河市劣挫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌东帅,老刑警劉巖压固,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異靠闭,居然都是意外死亡邓夕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門阎毅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焚刚,“玉大人,你說我怎么就攤上這事扇调】蠊荆” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵狼钮,是天一觀的道長(zhǎng)碳柱。 經(jīng)常有香客問我,道長(zhǎng)熬芜,這世上最難降的妖魔是什么莲镣? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涎拉,結(jié)果婚禮上瑞侮,老公的妹妹穿的比我還像新娘的圆。我一直安慰自己症革,他們只是感情好卦睹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栅组,像睡著了一般钮糖。 火紅的嫁衣襯著肌膚如雪梅掠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天店归,我揣著相機(jī)與錄音阎抒,去河邊找鬼。 笑死消痛,一個(gè)胖子當(dāng)著我的面吹牛挠蛉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肄满,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谴古,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了稠歉?” 一聲冷哼從身側(cè)響起掰担,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怒炸,沒想到半個(gè)月后带饱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阅羹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年勺疼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏鱼。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡执庐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出导梆,到底是詐尸還是另有隱情轨淌,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布看尼,位于F島的核電站递鹉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藏斩。R本人自食惡果不足惜躏结,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狰域。 院中可真熱鬧媳拴,春花似錦黄橘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拓颓。三九已至语婴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驶睦,已是汗流浹背砰左。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留场航,地道東北人缠导。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像溉痢,于是被迫代替她去往敵國(guó)和親僻造。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容