개발/three.js / / 2023. 2. 10. 14:49

[Capstone Project] 템플릿 vertex 적용 테스트 환경 만들기 - 3

반응형
※ 해당 글은 capstone 종합설계 프로젝트를 하면서 적었던 일지를 돌아보며 작성한 것입니다.

개발일지 2022.10.09

vertexArrayFilter.js 에서 position을 filter할 때 uv도 바꾸어야하는지에 대해서 고민하였다. 차후에 모델이 고정되면 어차피 uv가 바뀔일은 없으니 상관없을까 생각도 하였지만, 일단 더 급한 일들이 있어 uv는 나중으로 미루고 localToWorld 넣을라고 모듈을 수정던 작업을 계속 진행한다.

 

버텍스가 filted 에서 몇 번째 인덱스를 나타내는지 알 수 있는 getFiltedVertexIndex 모듈 또한 동시에 제작중이다.

 

vertexArrayFilter에 vector 및 float array처리를 하였고, localToWorld를 넣어본다.

 

위 사진은 모델을 필터링 처리한 데이터를 가지고 다시 매핑하여 새로운 모델을 뽑는 과정으로 만든 결과물이다.

 

 object의 내부 데이터를 확인해보니, 기존 모델을 가져왔을 때 position vertex 데이터보다 filt로 걸러내고 다시 mapping해서 만든 모델이 더 position vertex 개수가 많다. 이상하다.. vertex 개수는 똑같이 일치해야하는데 말이다.

 

 가능성이 있는 것은 본래의 208개의 vertex가 있는 모델에서 모든 face정보가 position array에 들어있는 것이 아니라. 일부 polygon의 face는 별도로 존재하는 것일 때 가능성이 있다.

 이는 vertex 를 blender에서 확인해보면 알 수 있을 것이다.

 

엥 이상하다… vertex의 개수는 208개가 맞다. 처리하면서 중복된 것이 생긴 것 같다.

 

보아하니 312로 vertex 개수가 변경되는 시점이 mapping array를 생성하였을 때이다.

 이게 왜 그런가 싶었더니, geometry.index의 count가 312이기 떄문이었다. vertex filtering을 할 때 index를 기준으로 반복하기 때문인 듯 한데..

이제보니 312라는 개수는 vertex 208 + faces 104 = 312인 듯 하다.

const vertexArr = res.resultVertexFloatArray.splice(0,933);
    geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertexArr, 3))

총 vertex 개수가 312이므로 array count는 936이기 때문에 위와 같이 마지막 face를 구성하는 마지막 vertex 3개를 빼서 하나의 폴리곤만 없어지도록 넣어보았다.

 

그랬더니 보이는 것과 같이 딱 한 개의 polygon이 빠져있다. 범위를 (0, 100), (0, 300), (0 600) 등으로 테스트 해본 결과, 312의 vertex가 모두 사용되는 것을 알았다.

 

그렇다면 처음의 208개의 vertex를 그대로 꺼내서 새 mesh로 넣으면 똑같이 나올까? 이것도 의문이다.

312의 경우에는 vertex 위치와 face 연결성을 합쳐서 그렇게 나왔다면, 208개의 경우를 그대로 넣은 경우 다르게 나오는 것이 맞을 것이다. 테스트해보자.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유