Three.js: mesh 不接收阴影,不被 intersectObjects 检测到

标签 three.js shadow mesh spotlight

我在 Three.JS 中有一个由 ExtrudeGeometry 制作的 WebGL 几何形状。
我的问题是为什么它没有接收到阴影(由 THREE.SpotLight 提供支持)或者为什么 Raycaster.intersectObject 没有检测到阴影!?
我的形状如下所示:

var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);
var mesh = THREE.SceneUtils.createMultiMaterialObject(geometry, [new THREE.MeshBasicMaterial({ color: color }), new THREE.MeshBasicMaterial({ color: color2, wireframe: true, transparent: false, wireframeLinewidth: 5 })]);
mesh.position.set(x, y, z);
mesh.rotation.set(rx, ry, rz);
mesh.scale.set(s, s, s);
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add(mesh);

它是自然的 ExtrudeGeometry,还是什么!?

最佳答案

这与几何无关。

THREE.SceneUtils.createMultiMaterialObject() 通过创建一个父对象和两个子网格来实现其效果,每个子网格都具有相同的几何形状。

您需要为 child 设置 receiveShadow,而不是父对象。

mesh.children[ 0 ].receiveShadow = true;
mesh.children[ 1 ].receiveShadow = true;

要让 Raycaster.intersectObjects() 处理分层对象,您需要像这样传入 recursive 标志。

raycaster.intersectObjects( objects, true );

three.js r.59

关于Three.js: mesh 不接收阴影,不被 intersectObjects 检测到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028158/

相关文章:

javascript - 缩放到 ThreeJS 中的对象

macos - 如何操纵窗口的阴影?

c++ - OpenGL - 索引缓冲困难

google-chrome - texImage2D : width or height out of range, Chrome 24

javascript - 加载本地文件时出现 "Cross origin requests are only supported for HTTP."错误

javascript - 三.js轮换

c++ - 绘制大量重叠的二维阴影

objective-c - NSWindow 阴影轮廓

printing - 3D 打印固有的不可定向表面

c - opengl 无法绘制网格