Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 I';我对Three.js中的聚光灯和阴影做了一些错误的处理_Javascript_3d_Webgl_Shadow_Three.js - Fatal编程技术网

Javascript I';我对Three.js中的聚光灯和阴影做了一些错误的处理

Javascript I';我对Three.js中的聚光灯和阴影做了一些错误的处理,javascript,3d,webgl,shadow,three.js,Javascript,3d,Webgl,Shadow,Three.js,我有一个非常简单的场景,其中有一个.dae网格,网格下面有一个7000*7000平面。我希望它由一个高聚光灯照亮,这样网格会在地面上投射阴影。但是,有些东西好像坏了!无论我把聚光灯放多高,它都不会照亮飞机!此外,当网格位于一个小正方形(周长)中时,它只会稍微照亮网格 你可以在这里看到情况: 只要我移动网格(一个怪物),它就不会再亮了 这是我如何实例化灯光的: // create a spotlight self.spotLight = new THREE.SpotLight(); // se

我有一个非常简单的场景,其中有一个.dae网格,网格下面有一个7000*7000平面。我希望它由一个高
聚光灯照亮,这样网格会在地面上投射阴影。但是,有些东西好像坏了!无论我把聚光灯放多高,它都不会照亮飞机!此外,当网格位于一个小正方形(周长)中时,它只会稍微照亮网格

你可以在这里看到情况:

只要我移动网格(一个怪物),它就不会再亮了

这是我如何实例化灯光的:

// create a spotlight
self.spotLight = new THREE.SpotLight();

// set its position
self.spotLight.position.y = 1000; //I recon it needs to be relatively high so it lights up everything
self.spotLight.position.x = 0; //(0, 0) are the coordinates where the mesh is spawned, and are the center of the plane
self.spotLight.position.z = 0;
self.spotLight.castShadow = true;
飞机就是这样制造的:

//The plane.
self.plane = new THREE.Mesh(new THREE.PlaneGeometry(self.groundSize, self.groundSize), new THREE.MeshLambertMaterial({color: 0x5C8A00}));
self.plane.receiveShadow = true;
self.plane.position.x = 0;
self.plane.position.y = -26;
self.plane.position.z = 0;
另外,这里还有一张图片,这一次,我添加了很多点光源:

你可以看到阴影是如何消失的

现在,我做错了什么?好了,光应该均匀地分散在各个方向上!另外,还有一个问题,我似乎无法在场景中添加多个聚光灯!如果我这样做,一切都会完全减速-这是有意的吗?也许是因为我在所有这些上都启用了阴影

@Neil,同样的事情也发生在你的代码中

我创建了一个显示兰伯特材质的平面和一个投射阴影的旋转立方体,也许你可以看到与你的不同之处

编辑

尝试使用一些参数,我可以通过以下方法停止演示中的剪辑:

spotLight.shadowCameraFov = 70;
更新和移动

我创建了一个显示Lambert材质的平面和一个投射阴影的旋转立方体,也许你可以看到与你的不同之处

编辑

尝试使用一些参数,我可以通过以下方法停止演示中的剪辑:

spotLight.shadowCameraFov = 70;

更新和移动

请查看我所做的编辑,您的代码也会发生同样的情况。@Bane-对不起,我不太明白,您是说阴影不正确还是被剪掉了?或者你的意思是如果一个物体被移动了,你就看不到阴影了?当物体移动得更远时,阴影似乎被切断了。就像有一个可以绘制阴影的矩形,而它之外的任何阴影都不会被绘制出来。@Bane-我可以建议尝试使用方向光进行这种行为吗?因为它是为整个场景设计的,我现在知道了如何操作它,谢谢!我仍然不明白为什么它不能均匀分散…请看我所做的编辑,同样的事情也会发生在你的代码中。@Bane-对不起,我不太明白,你是说阴影不正确还是被剪掉了?或者你的意思是如果一个物体被移动了,你就看不到阴影了?当物体移动得更远时,阴影似乎被切断了。就像有一个可以绘制阴影的矩形,而它之外的任何阴影都不会被绘制出来。@Bane-我可以建议尝试使用方向光进行这种行为吗?因为它是为整个场景设计的,我现在知道了如何操作它,谢谢!我还是不明白为什么它不能平均分散。。。