2

ExtrudeGeometry によって作成された Three.JS に WebGL Geometry Shape があります。
私の問題は、シャドウ (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 が自然なのか、それとも!?

4

1 に答える 1

6

これはジオメトリとは関係ありません。

THREE.SceneUtils.createMultiMaterialObject()は、それぞれが同じジオメトリを持つ親オブジェクトと 2 つの子メッシュを作成することで、その効果を実現します。

receiveShadow親の代わりに子を設定する必要があります。

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

階層オブジェクトで作業するには、そのようにフラグRaycaster.intersectObjects()を渡す必要があります。recursive

raycaster.intersectObjects( objects, true );

three.js r.59

于 2013-08-03T14:18:18.180 に答える