目录
前言
Layers 对象为Object3D对象分配了1-32个图层,编号为0-31。在内部实现上,每个图层对象被存储为一个bit mask, 默认所有 Object3D 对象都存储在第 0 个图层上。
图层对象可以用于控制对象的显示,和相机处于同一个图层的物体才可以被显示出来。
每个继承自 Object3D 的对象都有一个 Object3D.layers 对象。Mesh、Camera、Group等都继承自基类 Object3D,所以它们都有一个 layers 属性。
创建图层对象
通过构造函数 Layers() 可以创建一个新的图层对象,该对象默认与第 0 图层关联。
每个图层都被存储为一个32位的BitMask(掩码),启用了哪个图层,哪个位置的比特位就为1,其余为0。可以同时启用多个图层。
const layers = new THREE.Layers()
console.log(`默认图层0, mask值为: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
for (let i = 0; i < 10; ++i) {
layers.set(i)
console.log(`layers.set(${i}) -> layers.mask: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
}
layers.set(0)
layers.enableAll()
console.log(`layers.enableAll() -> layers.mask: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
layers.disableAll()
console.log(`layers.disableAll() -> layers.mask: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
layers.enable(2)
console.log(`layers.enable(2) -> layers.mask: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
layers.disable(2)
console.log(`layers.disable(2) -> layers.mask: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
for (let i = 0; i < 3; ++i) {
layers.toggle(i)
console.log(`layers.toggle(${i}) -> layers.mask: ${layers.mask} ---> 对应二进制:${layers.mask.toString(2)}`)
}
打印结果:

启用图层
.enable(layerNum)

最低0.47元/天 解锁文章
4991

被折叠的 条评论
为什么被折叠?



