关于three.js-Layers中.toggle方法与mask问题讨论

首先,关于three.js源码翻译-Layers.js可以查看three.js源码翻译-Layers.js

关于Three.js图层(Layers对象和.layers属性)郭隆邦大佬的博客。

其次当时存在两个疑问:

  1. .toggle方法,是如何进行控制显隐关系,查询资料可得知这个是控制层的显隐是谁填入谁就会被隐藏。
  2. mask掩码值是否是对应图层。我的理解:mask表示,某一图层执行某一方法后的状态
    .layers.set(0)--->mask = 1;.layers.set(1)--->mask = 2;.layers.set(2)--->mask = 8;
    .layers.enableAll()-->mask=-1;
    .layers.toggle( 0 )--->mask=-2;//遮蔽0层,显示其他层
    .layers.toggle( 1 )--->mask=-3;//遮蔽1层,显示其他层
    疑问:
    .mask属性是用 bit mask 表示当前图层对象与 0 - 31 中的哪些图层相对应。所属层所对应的比特位为 1,其他位位 0.但是在.toggle中所表现出mask的值不与上面所描述的一致。

下面所发出的是我所使用的案例地址,大家可以一起讨论关于mask。

 案例地址:

月球绕地球

纯图层

Webgl_layers相关代码理解:

       //camera.layers.enableAll();与下面等价
			 camera.layers.enable( 0 );
			 camera.layers.enable( 1 );
			 camera.layers.enable( 2 );

			scene = new THREE.Scene();
			scene.background = new THREE.Color( 0xf0f0f0 );//控制背景色

			//从一个点向各个方向发射的光源。 PointLight( color : Integer, intensity : Float, distance : Number, decay : Float )
			const light = new THREE.PointLight( 0xffffff, 1 );
			/*全部注销时,默认灯光是0层,0层是红灯,取消时,其他变黑
			*light.layers.enable( 0 );-->指开启哪一层的灯,当开灯层都关掉时,剩下的就是黑色了。
			*
			*/
			light.layers.enable( 0 ); // 红
			light.layers.enable( 1 ); // 绿
			// light.layers.enable( 2 ); // 蓝

			scene.add( camera );
			camera.add( light );
			//层的颜色		0层红色		1层绿色	   2层蓝色
			const colors = [ 0xff0000, 0x00ff00, 0x0000ff ];

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值