Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发射光源不影响其他对象的着色。js_Javascript_Three.js - Fatal编程技术网

Javascript 发射光源不影响其他对象的着色。js

Javascript 发射光源不影响其他对象的着色。js,javascript,three.js,Javascript,Three.js,我正在做一个太阳系项目,涉及行星和围绕太阳运行的火箭飞船。目前有一个主要光源,代码如下 // add subtle ambient lighting var ambientLight = new THREE.AmbientLight(0x0c0c0c); scene.add(ambientLight); // add spotlight for the shadows var spotLight = new THREE.PointLight(0xffffff); spotLight.posit

我正在做一个太阳系项目,涉及行星和围绕太阳运行的火箭飞船。目前有一个主要光源,代码如下

// add subtle ambient lighting
var ambientLight = new THREE.AmbientLight(0x0c0c0c);
scene.add(ambientLight);

// add spotlight for the shadows
var spotLight = new THREE.PointLight(0xffffff);
spotLight.position.set(-200, 50, 150);
spotLight.castShadow = true;
scene.add(spotLight);
 function createSunMesh(geom) {
     var loader = new THREE.TextureLoader();
     var planetSunTexture = loader.load("../assets/textures/planets/sun.jpg");
     //var normalSunTexture = loader.load("../assets/textures/planets/moonbump.jpg");

     var planetSunMaterial = new THREE.MeshLambertMaterial({map: planetSunTexture, emissive: 0xac3d25});
     //bumpMap: normalMoonTexture

     // create a multimaterial
     var planetSunMesh = THREE.SceneUtils.createMultiMaterialObject(geom, [planetSunMaterial]);
     planetSunMesh.visible = false;

     return planetSunMesh;
 }
我已经创造了一个太阳物体,并尝试赋予它发射性质,这样它也可以向其他行星发光。虽然从某种意义上说,它似乎使行星发光,但更多的是物体发光,没有阴影,而不是实际上成为光源。sun对象的代码如下所示

// add subtle ambient lighting
var ambientLight = new THREE.AmbientLight(0x0c0c0c);
scene.add(ambientLight);

// add spotlight for the shadows
var spotLight = new THREE.PointLight(0xffffff);
spotLight.position.set(-200, 50, 150);
spotLight.castShadow = true;
scene.add(spotLight);
 function createSunMesh(geom) {
     var loader = new THREE.TextureLoader();
     var planetSunTexture = loader.load("../assets/textures/planets/sun.jpg");
     //var normalSunTexture = loader.load("../assets/textures/planets/moonbump.jpg");

     var planetSunMaterial = new THREE.MeshLambertMaterial({map: planetSunTexture, emissive: 0xac3d25});
     //bumpMap: normalMoonTexture

     // create a multimaterial
     var planetSunMesh = THREE.SceneUtils.createMultiMaterialObject(geom, [planetSunMaterial]);
     planetSunMesh.visible = false;

     return planetSunMesh;
 }

所以我的问题是,有没有一种方法可以使光的发射特性足够强,足以影响其他物体?我曾尝试使用两种Lambert/Phong材质,但它们似乎彼此具有相同的效果。

我最终重新定位了主聚光灯,使其位于我的太阳对象内,这使其具有了我想要的相同效果。此外,我增加了强度并减少了衰减,以使灯光具有更真实的效果

您正在谈论场景中对象之间的灯光交互,three.js不支持这种开箱即用的效果。您可以在
webgl\u raymarching\u reflect.html中看到一个示例,但是您必须自己实现这个(或类似的算法)。@gaitat这样的功能很难实现吗?光交互被认为是一个不容易实现的功能。有许多算法可以遵循。如果您限制了问题的范围,那么问题可能会变得容易处理。@gaitat在这种情况下,是否可以完全移除聚光灯,以便所有对象的亮度都相等?因为目前我的光线只从一个方向发出,这使得我的一些模型更难看到我还没有看到你的应用程序,我不知道它是做什么的,我也不知道你想要实现什么;基本上,这是你的决定。