2017-02-22 7 views
5

Three.js로 작업하고 있습니다. 3D 점 (x, y, z) 및 얼굴 모음이 있습니다. 한 얼굴은 K 포인트으로 구성됩니다. 오목한 볼록한 모양 일 수 있습니다. Three.js 문서에서 도움이 될만한 것이 없습니다. 한 가지 해결책은 그 모양을 삼각화할 수 있지만 지금까지는 어떤 3D 삼각 측량 알고리즘도 찾지 못했습니다.얼굴 당 K 개의 꼭지점이있는 3D 점의 삼각 측량

다른 솔루션은 그런 일을 할 것입니다 :

var pointsGeometry = new THREE.Geometry(); 

pointsGeometry.vertices.push(new THREE.Vector3(10, 0, 0)); 
pointsGeometry.vertices.push(new THREE.Vector3(10, 10, 0)); 
pointsGeometry.vertices.push(new THREE.Vector3(0, 10, 0)); 
pointsGeometry.vertices.push(new THREE.Vector3(1, 3, 0)); 
pointsGeometry.vertices.push(new THREE.Vector3(-1, 3, 0)); 
pointsGeometry.vertices.push(new THREE.Vector3(10, 0, 0)); 

var material = new THREE.MeshBasicMaterial({color: 0x00ff00}); 

var mesh = new THREE.Shape/ShapeGeometry/Something(pointsGeometry, material); 
group.add(mesh); 

scene.add(group); 

내가 함께 폐쇄 된 표면을 구축 이러한 모양을 많이 가지고 있어요.

의견이 있으십니까?

감사합니다. 좋은 하루 되세요.

답변

3

, 그 달성하기 위해 2 가지 방법이 있습니다 :

  • (Three.js를 제공하지 않는) 3 차원 삼각 측량 알고리즘을 사용;
  • 일반적으로 Three.js Shape 개체에 사용되는 2D 삼각 측량 알고리즘을 사용하여 일부 변형이 형상의 각면에 적용됩니다.

마지막 하나는 멋지지만 불행히도, 내가 시도한 것처럼 그렇게 사소한 것이 아니라는 것을 깨달았습니다. 지오메트리의 각면에 대한

: Paul-Jan 말한 내가 비슷한 함께했다

  1. 계산 중심 얼굴;
  2. 얼굴 법선을 계산하십시오.
  3. 얼굴의 행렬을 계산합니다.
  4. 3D 점을면의 2D 평면에 투영합니다.
  5. 형상을 생성하십시오 (Shape 삼각 측량 알고리즘으로 삼각 측량).
  6. Mesh를 작성하고 Object3D에 추가 새로 만든 형상에 얼굴 매트릭스를 적용 (나는하려 하나에 모든 형상을 합병,하지만 ShapeBufferGeometry 실패)

확인 this fiddle .

정점의 winding order을 조심하거나 THREE.Material.sideTHREE.DoubleSide으로 설정하여면이 제거되지 않도록하십시오.

+0

나는 점들이 동일 평면 상에 있음을 이미 알고 있으므로 평면의 법선을 쉽게 계산할 수 있고 평면과 점을 X, Y 평면에 투영 할 수 있습니다. 이미 2D 삼각 측량 알고리즘을 가지고 있습니다. 이후 나는 순서를 필요로하기 때문에 점을 이전 평면으로 되돌릴 필요가 없습니다. 점의 순서에 따라 삼각형을 쉽게 형성하고 삼각형으로 보낼 수 있습니다 .js는 버퍼 형상으로 객체를 작성합니다. (내가 당신을 태그 수없는 것처럼 보입니다)하지만 감사와 데모 위대한입니다, 내 데이터로 테스트하고 내 시스템에 맞는 지 확인하십시오 :) – Swisx

1

Three.js 문서와 특히 Shape 개체를 다시보고 싶을 것 같습니다. 해당 페이지의 샘플 코드는 bezierCurveTo을 사용하지만 대신 lineTo을 사용하면 일련의 점에 피드를 제공하고 오목한 다각형 (구멍 포함)을 만들 수 있습니다. 당신이 지적

+1

OP는 3D 포인트를 처리해야하지만 [Three.js Shape의 삼각 측량 알고리즘] (https://github.com/neeh/three.js/blob/dev/src/extras/ShapeUtils.js) 2D 점으로 작업합니다.Shape에 전달하기 전에 다각형의 각면에 대한 변환이 필요합니다. – neeh

+0

아, 좋은 지적이야. 나는 당신이 단지 3D 포인트를 먹일 수 있다는 표현 아래에 있었고 모든 것들이 자동으로 해결 될 것입니다, 수정 해 주셔서 감사합니다! 이제 각면의 점을 평면에 투영하고 그 모양을 올바른 방향으로 다시 변환해야합니다. 아주 사소한 양의 얼굴에는별로 실용적이지 않습니다. –

+0

@ Paul-Jan 덕분에 대답을 찾았습니다. 예, 슬프게도 3D 지점에서 작동하지 않습니다. 이후 나는 같은 결론을 내놓았다. – Swisx