我正在用dat.GUI和three.js(r72)检查不同类型的光线,并且在打开/关闭HemisphereLight时被卡住了。 我将每个灯光的一个实例添加到场景中:
var pointLight = new THREE.PointLight(this._whiteColor);
pointLight.visible = false;
var hemisphereLight = new THREE.HemisphereLight(this._whiteColor, this._whiteColor);
hemisphereLight.visible = false;
等...
和一个用简单处理程序打开/关闭的按钮。像这样:
me._sceneObjects.hemisphereLight.visible = value;
因此,在渲染之前,场景中存在所有灯光,但不可见。 当为Hemisphere灯执行处理程序时 - 它保持不可见。排除hemisphereLight.visible = false后;工作正常。
目前我在渲染第一帧后禁用此灯光:
function render() {
some code ...
if (!sentenceExecuted && firstCall > 0) {
hemisphereLight.light.visible = false;
sentenceExecuted = true;
} else {
firstCall++;
}
};
如果没有解决方法,我将不胜感激。 对不起,可能会出现英文错误。
答案 0 :(得分:0)
WestLangley,感谢您提供Wiki article的链接。
在阅读并尝试了这些例子后,我发现了自己的错误。 本来我想添加"隐形" (使用Object3D.visible)将渲染光渲染到场景中,然后动态打开/关闭它们。
一些灯光(在我的情况下是HemisphereLight和SpotLight)不能以这种方式工作,因为内部的three.js渲染algorythm(几何形状和材料的缓冲区是在不考虑我的灯光的情况下构建的)。
为实现动态闪电,本文作者建议:
添加强度= 0的光线,然后增加光线(渲染时会考虑这种光线)
将灯光可见度设置为true后,强制对受影响的场景对象更新材料(material.needsUpdate = true)。