如何为 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');
}
我想使用 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');
}