本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Three.js模型隐藏或显示
吴振华 · 559浏览 · 发布于2019-06-14 +关注

你在使用Three.js开发项目的过程中,可能需要隐藏一个模型,或者一个模型处于隐藏状态,又希望让它显示出来,那么你可以继续阅读下去。


材质属性.visible

查看Three.js文档的基类Material,可以知道材质属性.visible的作用就是控制绑定该材质的模型对象是否可见,默认值是true,LineBasicMaterial、SpriteMaterial、MeshBasicMaterial等材质都会继承基类Material的可见性.visible属性,也就是说无论点模型Points、线模型Line或网格模型Mesh默认都是可见的。如果想隐藏一个模型可以设置该模型材质的.visible属性值为true。

// 隐藏网格模型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源码。


相关推荐

图形学基础 | 实现OBJ文件的载入

iamitnan · 1698浏览 · 2019-05-29 10:10:17
干货!麻将平胡算法

· 993浏览 · 2019-06-06 11:45:17
Java桌球小游戏

奔跑的男人 · 640浏览 · 2019-06-11 09:37:46
图形用户界面和游戏开发

qq2360248666 · 712浏览 · 2019-06-11 09:57:01
Cocos工程命名规则整理(node部分)

吴振华 · 879浏览 · 2019-06-14 10:24:18
教你用Python画一只属于自己的皮卡丘

· 1669浏览 · 2019-06-17 10:35:38
加载中

0评论

评论
坐标是江苏.南京,行业是互联网,技术是PHP和java,还有熟悉前后端等。
分类专栏
小鸟云服务器
扫码进入手机网页