不设置任何layers时,会显示两个正方体,默认的,所有 Object3D 对象都存储在第 0 个图层上。
现在我把红色正方体设置到图层1
object.layers.set(1)
function _createBox1() {
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({
color: "red",
map: loadTexture("/img/木纹.png")
});
const object = new THREE.Mesh(geometry, material);
object.position.set(0, 0, 0);
scene.value?.add(object);
//设置图层1
object.layers.set(1);
}
因为相机默认看向的是图层0,所有图层1的红色正方体就不可见了
这里我用gui写了个控制
function initGui() {
gui = new GUI();
const layers = {
显示红色() {
camera.value?.layers.enable(1);
},
};
gui.add(layers, "显示红色");
}
也可以写成toggle切换显示隐藏
function initGui() {
gui = new GUI();
const layers = {
"显示/隐藏红色"() {
camera.value?.layers.toggle(1);
},
};
gui.add(layers, "显示/隐藏红色");
}
Layers 对象为 Object3D 分配 1个到 32 个图层。32个图层从 0 到 31 编号标记。 在内部实现上,每个图层对象被存储为一个 bit mask, 默认的,所有 Object3D 对象都存储在第 0 个图层上。
图层对象可以用于控制对象的显示。当 camera 的内容被渲染时与其共享图层相同的物体会被显示。每个对象都需要与一个 camera 共享图层。
每个继承自 Object3D 的对象都有一个 Object3D.layers 对象。
camera.value?.layers.enableAll();
camera.value?.layers.disableAll();
camera.value?.enable(1)
camera.value?.disable(1)
object.set(3)
会在传入的参数图层何默认图层之间切换
camera.value?.layers.toggle(1);