2013-12-12 3 views
3

교차 오브젝트 (raycaster.intersectObject()에서 반환)는 facefaceIndex 속성을가집니다. 그러나 교차 된 객체가 BufferGeometry 인 경우 이러한 속성은 null입니다. 반면에 point 속성은 예상대로 작동합니다.BufferGeometry에서 레이 캐스트 교차의면을 확인하십시오.

BufferGeometry의 얼굴이 맞았는지 확인할 방법이 있습니까? BufferGeometry에는 faces 배열이 분명히 없지만, 히트 얼굴을 정의하는 position 속성의 포인트 색인을 아는 것이 큰 도움이됩니다.

(나는 모든 점의 좌표를 알고 있기 때문에 나는 확실히 어떤 수학을 사용할 수 있지만, 그 큰 구조 내 성능을 죽일 것)

+0

를 R68? 언제든지 코드를 수정하여 원하는 것을 반환 할 수 있으며 유용하다고 판단되면 기능 향상을 제안 할 수 있습니다. – WestLangley

+0

더 우아한 방법이 있는지 궁금 해서요. 어쩌면 평범한 기하학과 비슷한 얼굴 인식을 가능하게하는 깃발을 세워 놓았습니다. 내가 생각해 낼 수있는 것보다 훨씬 좋은 것은 틀림 없습니다. 얼굴을 직접 결정하는 것이 최선의 대안입니다. – asdf

+0

'Raycaster.js'를 아직 보지 않으 셨다면, 그것이 무엇을 계산하는지보실 수 있습니다. – WestLangley

답변

2

사실, 관련 코드가 THREE.Mesh에서 찾을 수 있습니다을; Raycaster.js을 보면 이 대부분 THREE.Object3D 인 (문서화되지 않은 초록) raycast 메서드에 위임되었음을 알 수 있습니다. Various subclasses of Object3D implement this method (예 : Mesh)

relevant lines from THREE.Mesh#raycast

교차로 객체는 다음과 같이 보여 : a, bc이 교차 된 얼굴에 정점의 인덱스입니다

{ 
    distance: distance, 
    point: intersectionPoint, 
    indices: [ a, b, c ], 
    face: null, 
    faceIndex: null, 
    object: this 
} 

.

이 그 교차 된 얼굴을 포함하는 정점의 인덱스를 얻을 것을 의미합니다, 당신은 할 수 있습니다 :

var intersect = raycaster.intersectObject(scene); 
if (intersect != null) { 
    var faceIndices; 
    if (intersect.face != null) { 
     faceIndices = [ face.a, face.b, face.c ]; 
    } else if (intersect.indices != null) { 
     faceIndices = intersect.indices 
    } 

    // do something with the faceIndices 
} 

three.js를 난 당신이 아니, 자신의 질문에 대답 생각

+0

답장을 보내 주셔서 감사합니다. 그 질문은 낡았습니다. 나는 그 시점에 Three.js가 그렇게 할 수 있다고 생각하지 않습니다. Btw. raycaster는 선형 시간으로 작업 했으므로 GPU 따기를 사용했습니다. – asdf

+0

예. 나는 최근에 똑같은 일로 어려움을 겪었고 다른 사람들이 도움이 될 수 있다고 생각했습니다. – caseygrun