你在使用Three.js開發項目的過程當中,可能須要隱藏一個模型,或者一個模型處於隱藏狀態,又但願讓它顯示出來,那麼你能夠繼續閱讀下去。html
我的技術博客code
.visible
查看Three.js文檔的基類Material
,能夠知道材質屬性.visible
的做用就是控制綁定該材質的模型對象是否可見,默認值是true
,LineBasicMaterial
、SpriteMaterial
、MeshBasicMaterial
等材質都會繼承基類Material
的可見性.visible
屬性,也就是說不管點模型Points
、線模型Line
或網格模型Mesh
默認都是可見的。若是想隱藏一個模型能夠設置該模型材質的.visible
屬性值爲true
。htm
// 隱藏網格模型mesh,visible的默認值是true mesh.material.visible =false
// 使網格模型mesh處於顯示狀態 mesh.material.visible =true
若是一個模型對象包含了多個網格模型Mesh
,嵌套了不少層,造成了一個樹結構,只有根部節點是網格模型Mesh
,中間節點都是組對象Group
或Object3D對象
。若是你想經過控制材質的.visible
屬性批量隱藏該模型對象下的全部網格模型Mesh
,首先須要作的就是要遞歸遍歷樹結構找到全部的網格模型Mesh
,而後把全部網格模型Mesh
材質的.visible
屬性設置爲false
。對象
經過對象的.traverse()
方法遞歸遍歷一個模型,而後經過對象的類型屬性.type
判斷該對象是否是網格模型對象Mesh
,若是是的話執行obj.material.visible =false
。繼承
modelObject.traverse(function(obj) { if (obj.type === "Mesh") { obj.material.visible =false } })
.visible
本質若是你有興趣瞭解Three.js底層知識,能夠閱讀這段話,根據提示深刻研究,若是沒有興趣,能夠跳過,只要會使用.visible
就能夠了。遞歸
Three.js的WebGL渲染器WebGLRenderer
在渲染一個點Points
、線Line
、網格Mesh
等模型對象的時候,會判斷它綁定材質的.visible
屬性值,若是一個模型綁定材質的.visible
屬性是false
,該模型就不會被渲染,具體能夠閱讀src目錄下的WebGLRenderer.js
源碼。ip