當我在運行時添加一個點時沒有任何反應。我必須更改對象的材質才能看到修改對象上的燈光。在運行時添加燈光:材料未更新?
我加了MyMaterial.needsUpdate = true;
:這是默認值,它什麼都不會改變。
我用飛機對象做了一個簡單的測試(PlaneGeometry
+ MeshPhongMaterial
)。
當我按下「L」鍵時,我添加一個SpotLight ==>沒有任何反應。
然後,當我按下「M」鍵時,我將一種新材料分配給飛機==>我看到了聚光燈。
我失去了一些東西,但我不知道是什麼...
我用three.js所R69
WebGLRenderer
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setClearColor(0xffffff, 1);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMapEnabled = true;
renderer.shadowMapType = THREE.PCFSoftShadowMap;
renderer.shadowMapWidth = 1024;
renderer.shadowMapHeight = 1024;
飛機:
var planeGeometry = new THREE.PlaneGeometry(60, 20);
var planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff });
planeMaterial.side = THREE.DoubleSide;
planeMaterial.needsUpdate = true;
plane = new THREE.Mesh(planeGeometry, planeMaterial);
plane.rotation.set(Math.PI/2.0, 0, 0);
plane.receiveShadow = true;
plane.castShadow = true;
scene.add(plane);
關鍵行動(與THREEx.KeyboardState.js):
function updateKey() {
// Add light
if (keyboard.pressed("L")) {
var spotLight = new THREE.SpotLight(0xffffff, 1.0, 0.0);
spotLight.position.set(0, 15, 0);
spotLight.angle = 1.39;
spotLight.intensity = 0.5;
var lightTarget = new THREE.Object3D();
lightTarget.position.set(10,0,0);
scene.add(lightTarget);
spotLight.target = lightTarget;
spotLight.castShadow = true;
spotLight.shadowMapWidth = 1024;
spotLight.shadowMapHeight = 1024;
spotLight.shadowCameraNear = 0.1;
spotLight.shadowCameraFar = 50;
spotLight.shadowCameraFov = 160;
spotLight.shadowCameraVisible = true;
scene.add(spotLight);
}
// change material
if (keyboard.pressed("M")) {
var mat = new THREE.MeshPhongMaterial({ color: 0x00ff00 });
mat.side = THREE.DoubleSide;
plane.material = mat;
}
}
查看http://stackoverflow.com/questions/26533961/i-cant-add-light-with-mouse-event#comment41698009_26533961 – WestLangley 2014-10-28 15:16:29
我在發佈之前看到了您的回答,但我認爲(或者我不明白.. )「needsUpdate」是一個狀態變量。這就是爲什麼我只將它設置爲true一次。並感謝您在這裏的所有答案! – AllForum 2014-10-28 15:37:37