2016-08-22 2 views
0

raycaster를 사용하여 교차를 찾았습니다.Three.js에서 얼굴 글로벌을 얻으십시오

intersects[0] 

이 교차면의 세계는 어떻게 정상적으로 나타 납니까?

나는이 질문을 올바로 공식화했으면 좋겠다. 다른 방법으로 표현하기 : 메쉬 표면의 한 점의 방향을 어떻게 얻습니까?

답변

1

정상적으로 얼굴에 사용할 수 있습니다.

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()); 
+0

감사합니다 사용! 그것은 작동합니다! :) – arpo

+0

중첩 된 객체에 대해이 작업을 수행하려면 어떻게해야합니까? –

+0

@JamesHeald 귀하의 질문은 OP와 접하게 관련되어 있습니다. 그러나 raycaster를 사용할 때는 일반적으로 사용되는 메서드 인 .intersectObject (object, recursive)가 있습니다. 중첩 된 모든 객체를 통해 반복 되려면 두 번째 매개 변수 "recursive"를 true로 설정해야합니다. 이것은 성능에 영향을 미칠 수 있으므로 잘 고려해야합니다. – Radio

관련 문제