如何在three.js中运行时添加和删除不同类型的光源?
我有一些复选框,每个表示一种光源类型,当复选框被选中时,我想向场景中添加特定的光源类型,并在取消选中时将光源删除。
我尝试了:scene.remove(light)
和light.visible = false
,但都没有起作用。
WebGLRenderer
,如果你改变灯光的数量或类型,则需要设置 material.needsUpdate = true
。隐藏/显示光源使用:
light.visible = false; //或 true
并将所有材质的needsUpdate设置为true。
material.needsUpdate = true;
我将所有材质放在一个对象中,其属性是材质对象,所以我有:
for (var material in materials) {
if (materials.hasOwnProperty(material)) {
materials[material].needsUpdate = true;
}
}
这将允许您查看所有更新。在执行needsUpdate技巧之前,在大多数情况下,您将什么也看不到。
对我来说,它是这样工作的:
render(){
// some other code ....
//light
if($('#dLight').is(':checked')){
dLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value')).normalize();
dLight.intensity = $('#light-intensity-id').slider('value');
dLight.color.setHex('0x' + $('#light-color').val());
scene.add(dLight);
}else{
scene.remove(dLight);
}
if($('#pLight').is(':checked')){
pLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value'));
pLight.intensity = $('#light-intensity-id').slider('value');
pLight.color.setHex('0x' + $('#light-color').val());
scene.add(pLight);
}else{
scene.remove(pLight);
}
if($('#sLight').is(':checked')){
sLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value'));
sLight.intensity = $('#light-intensity-id').slider('value');
sLight.color.setHex('0x' + $('#light-color').val());
scene.add(sLight);
}else{
scene.remove(sLight);
}
if($('#aLight').is(':checked')){
aLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value'));
aLight.color.setHex('0x' + $('#light-color').val());
scene.add(aLight);
}else{
scene.remove(aLight);
}
}