0
raycaster를 사용하여 교차를 찾았습니다.Three.js에서 얼굴 글로벌을 얻으십시오
intersects[0]
이 교차면의 세계는 어떻게 정상적으로 나타 납니까?
나는이 질문을 올바로 공식화했으면 좋겠다. 다른 방법으로 표현하기 : 메쉬 표면의 한 점의 방향을 어떻게 얻습니까?
raycaster를 사용하여 교차를 찾았습니다.Three.js에서 얼굴 글로벌을 얻으십시오
intersects[0]
이 교차면의 세계는 어떻게 정상적으로 나타 납니까?
나는이 질문을 올바로 공식화했으면 좋겠다. 다른 방법으로 표현하기 : 메쉬 표면의 한 점의 방향을 어떻게 얻습니까?
정상적으로 얼굴에 사용할 수 있습니다.
intersects[0].face.normal
전형적인 교차 예를
를 들어은 다음을 반환
{
"distance": 511.4062319788414,
"point": {
"x": -49.99999999999999,
"y": -2.3972604422461297,
"z": -8.950476224522788
},
"face": {
"a": 2,
"b": 3,
"c": 1,
"normal": {
"x": 1,
"y": 0,
"z": 0
},
"vertexNormals": [{
"x": 1,
"y": 0,
"z": 0
}, {
"x": 1,
"y": 0,
"z": 0
}, {
"x": 1,
"y": 0,
"z": 0
}],
"color": {},
"vertexColors": [],
"vertexTangents": [],
"materialIndex": 0
},
"faceIndex": 1,
"object": {
"metadata": {
"version": 4.3,
"type": "Object",
"generator": "ObjectExporter"
},
"geometries": [{
"uuid": "D12DB865-0BA3-4B38-BB18-92CBCFD5D630",
"type": "BoxGeometry",
"width": 20,
"height": 20,
"depth": 20
}],
"materials": [{
"uuid": "B405897C-0A60-44A8-B057-683EFA53E895",
"type": "MeshLambertMaterial",
"color": 16716340,
"ambient": 16777215,
"emissive": 0
}],
"object": {
"uuid": "34E07648-DA46-42B8-A1B1-7C87A67315B9",
"type": "Mesh",
"name": "cube1",
"geometry": "D12DB865-0BA3-4B38-BB18-92CBCFD5D630",
"material": "B405897C-0A60-44A8-B057-683EFA53E895",
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -60, 0, 0, 1]
}
}
}
는 물체가 포착 항목입니다 세계 정상에 변환하려면
var normalMatrix = new THREE.Matrix3().getNormalMatrix(object.matrixWorld);
console.log(normal.clone().applyMatrix3(normalMatrix).normalize());
감사합니다 사용! 그것은 작동합니다! :) – arpo
중첩 된 객체에 대해이 작업을 수행하려면 어떻게해야합니까? –
@JamesHeald 귀하의 질문은 OP와 접하게 관련되어 있습니다. 그러나 raycaster를 사용할 때는 일반적으로 사용되는 메서드 인 .intersectObject (object, recursive)가 있습니다. 중첩 된 모든 객체를 통해 반복 되려면 두 번째 매개 변수 "recursive"를 true로 설정해야합니다. 이것은 성능에 영향을 미칠 수 있으므로 잘 고려해야합니다. – Radio