我將SpotLight添加到我的場景以及一個OctahedronGeometry(作爲助手),以便讓用戶看到它。 用戶必須能夠通過單擊它來選擇它,才能通過transformControls移動SpotLight。它的工作原理!Three.js - SELECTED SpotLight&dat.gui
但是,選中後,我希望能夠編輯SpotLight設置。問題是我正在與幾何圖形(已選定)進行交互,而不是直接與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;});
[編輯] 這是我的選擇的變量:
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'變量是從哪裏得到的? – gaitat
在編輯:)見上面 – sRcBh
你不需要'對象'變量!你可以使用'scene.children' –