我在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()
通过创建父对象和两个子网格来实现其效果,每个子网格具有相同的几何体.
您需要设置receiveShadow
子项而不是父项.
mesh.children[ 0 ].receiveShadow = true; mesh.children[ 1 ].receiveShadow = true;
要开始Raycaster.intersectObjects()
处理分层对象,您需要传递recursive
这样的标志.
raycaster.intersectObjects( objects, true );
three.js r.59