【发布时间】:2015-10-29 16:05:08
【问题描述】:
我正在向我的场景添加一个 SpotLight 和一个 OctahedronGeometry(作为助手),以使其对用户可见。 用户必须能够通过单击以选择它来使用 transformControls 移动 SpotLight。它有效!
But, when selected, I want to be able to edit the SpotLight settings.问题是我正在与几何体(已选择)而不是直接与 SpotLight 进行交互。
这是我的功能:
var aSpotLight = document.getElementById("addSpotLight");
aSpotLight.addEventListener("click", addSpotLight, false);
function addSpotLight(){
var object = new THREE.SpotLight( 0xffffff, 1, 0, Math.PI * 0.1, 10 );
object.name = 'SpotLight';
var helper = new THREE.Mesh(new THREE.OctahedronGeometry(10, 0), new THREE.MeshBasicMaterial( { color: 0x00ee00, wireframe: true, transparent: true } ));
helper.position.set( 0, 30, 0 );
object.position.set( 0, 30, 0 );
scene.add(helper);
helper.add( object );
objects.push(object);
renderer.render( scene, camera );
material.needsUpdate = true;
}
这是我的 dat.gui 设置:
selectedObjectAppearance = {
lightColor : 0xffffff,
lightDistance : 10,
lightIntensity : 1,
lightlightShadowDarkness : 1
};
guiObject.addColor(selectedObjectAppearance, 'lightColor').name('Light Color').onChange(function (e) {SELECTED.children.color = new THREE.Color(e);});
guiObject.add( selectedObjectAppearance, 'lightDistance' ).min(1).max(15).step(0.5).name('Light distance').onChange(function (e) {SELECTED.distance = e;});
guiObject.add( selectedObjectAppearance, 'lightIntensity' ).min(0).max(1).step(0.05).name('Light intensity').onChange(function (e) {SELECTED.intensity = e;});
guiObject.add( selectedObjectAppearance, 'lightlightShadowDarkness' ).min(0).max(1).step(0.05).name('Light shadow darkness').onChange(function (e) {SELECTED.shadowDarkness = e;});
[编辑] 这是我的 SELECTED 变量:
function onDocumentMouseDown(event){
event.preventDefault();
if($(event.target).is('canvas')){
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(objects);
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
control.attach(SELECTED);
scene.add(control);
$(guiObject.domElement).attr("hidden", false);
// SELECTED.material.color.setHex( Math.random() * 0xffffff );
} else{
control.detach(SELECTED);
scene.remove(control);
control.update();
$(guiObject.domElement).attr("hidden", true);
}
} else{
$(guiObject.domElement).attr("hidden", false);
}
}
怎么可能?
【问题讨论】:
-
你的
SELECTED变量从哪里获得它的值? -
见上文编辑 :)
-
你不需要
objects变量!你可以使用scene.children
标签: javascript three.js light