如何为 datGUI 访问环境光的 object3D

How to access object3D of ambient light for datGUI

我想使用 datGUI 来控制场景中的灯光强度。但首先,我必须将光作为对象获取,并使用其参数 'intensity'。从 AFrame 文档(以及我回答的最后一个 SO 问题)中,访问底层 THREE.lights 的方法是使用 entity.getObject3D(type)。这在访问网格时有效,但我无法获得对 lightEl.getObject3D('light') 的响应。 return未定义

我有一个简单的场景,只有一个球体和一个环境光。在自定义组件中,我引用了环境光元素,然后使用带有许多不同类型参数的 getObject3D() 方法,但无法获得对 THREE.light 的引用。 我可以看到(在控制台中)(环境光)THREE.group,其中包含 THREE.light,类型为:"AmbientLight"。但是使用它作为类型参数也不起作用。

 <script>
        AFRAME.registerComponent("dat-gui", {
            init: function(){               
                let sceneMap = scene.object3DMap;
                console.log('scene map: ', sceneMap);

                let amLtEl = document.querySelector("#ambientLight");
                console.log('ambient Light Entity: ', amLtEl);

                let amLtEl3D = amLtEl.object3D;
                console.log("amLtEl3D ", amLtEl3D.children);

                let amLtGet3D = amLtEl.getObject3D('AmbientLight');
                console.log("El.getObject3D('AmbientLight')", amLtGet3D);

                let amLtGet3Dl = amLtEl.getObject3D();
                console.log("El.getObject3D('light')", amLtGet3Dl);
            }
        });

<a-scene background="color:#444">
            <a-entity id="torusKnot" geometry="primitive: torusKnot" position="0 0 -4" material="color: #999"></a-entity>
            <a-entity id="camera" camera orbit-controls="target: 0 0 -4" dat-gui></a-entity>
            <a-entity id="ambientLight" light="type: ambient; intensity: 0.5"></a-entity>
            <a-entity id="directionalLight" light="type: directional; target: #torusKnot" position="0 5 0"></a-entity>
        </a-scene>

我期望 el.getObject3D('light') 到 return 对底层 THREE.light 的引用,因为它与 ('mesh') 完美配合,但我没有使用 returns THREE.light。 我这里的项目有问题 https://glitch.com/~ambient-light-gui

我的服务器上也是一样的,所以你可以看到控制台。 http://www.sensorium.love/experiments/yamashiro/bonsai/ambientLightGUI.html

等待场景加载。当您的组件 init 运行时,其余实体可能尚未准备就绪:

sceneEl.addEventListener('loaded', function () {
   var light = document.querySelector('#ambientLight").getObject3D('light');
}