3D 컨벡스헐 이론에 대해 얘기하기 전에 일상적인 일기를 쓴다.
포스팅이 정말 오랜만이다..
학교도 개강하고, 그래픽 연구실에 들어와 정신없이 하루하루를 보내고 있다.
그래픽 연구실에서 obj를 감싸는 AABB에 대해 배우다, 3D ConvexHull을 알게 되었는데,
나는 처음에 단순히 각 축에 정사영을 시킨 뒤 연결 시키면 될 것이라 생각했지만, 어림도 없었다.
그래서 논문을 찾아 본 결과 이론을 알게 되었지만, 구현을 하다가 인덱스가 중복이 되어 메모리와, 시간을 엄청 소비하는 문제가 생겨.. 다른 공부도 하고, 학교 수업도 따라가야 해서 어쩔 수 없이 손 내려놓게 되었지만, 이론에 대해서는 알게 되었다.
1. 먼저 .obj에서 각 정점을 다 읽어 온다.
2. 읽어온 obj 파일에서 정점 4개를 선택한다. (순서는 상관없다.)
(만약 4개 이하라면, 그 obj 자체가 컨벡스헐을 이룬다.)
3. 읽어온 각 정점을 시계 또는 반시계 방향으로 면을 만들어준다.(시계 또는 반시계 방향 -> 내가 생각하기엔 중요한 부분이다.)
4. 그리고 obj에서 읽어온 정점들을 하나씩에 대하여 다음과 같이 연산한다.
4.1 각 면에 대해 보이는 면인지 안보이는 면인지 판별한다. (보이는 면을 구하는 법은 삼각 뿔 공식을 이용하면 되는데,
정점과, 한 면과 삼각뿔을 만들었을 때, 이 값이 시계 방향일 때, 반시계 방향일 때 값이 양수와 음수로 판별이 가능하 다. -> 이 이유는 벡터의 수직 벡터를 찾는 것이 외적인데 이는 시계 방향, 또는 반시계 방향으로 방향을 일정하게 정할 수 있어서, 해당 정점이 면에 대해 뒷쪽에 있는지, 앞쪽에 있는지 확인이 가능하다.)
4.2 그리고 각 보이는 면에 대해서 테두리를 구해야 한다.(나는 이 지점에서 정점이 같은것이 중복되는 문제가 생겼는데, 내가 생각한 이론은, 보이는 면과 보이지 않는 면의 정점이 같다면, 해당 정점은 테두리라고 판별을 했다. 하지만 어떤 문제때문인지 모르겠지만, 정점이 중복이 되는 문제가 생겼다.)
4.3 그리고 보이는 면은 지워주고, 테두리와 새로운 정점을 연결 시켜 새로운 면을 추가한다.(이때 시계 또는 반시계 방향으로 연결을 했다면, 새로운 정점과 연결 할 때에도, 시계 또는 반시계 방향으로 연결할 수 있다.)
5 모든 정점에 대해 연산이 끝난 뒤, 각 면을 그리면 완성이 된다.
하지만, 내가 생각한 이론에 대해서는 시간이 많이 걸릴 것으로 판단이 되는데,
여러 곳에선 divide and conquer 방식으로 구현이 가능하다는 데 검색 능력의 한계와, 영어 해독 능력의 부족으로 미처 찾지 못했다..
그리고 나는 완성을 하지 못했으므로 이론에 대해 틀린 곳이 있을 수 있다. (어쩌면 내 구현 실력이 안되서 못한 걸 수도...)
틀린 것이 있다면, 누가 짚어주고 정보를 공유 했으면 좋겠다. (사실 구현하는 데 아이디어가 안떠올라서 한참을 인터넷을 찾았는데, 그마저도 쉽게 알 수 있는 정보가 없어서, 구현 하고자 하는 마음은 있었지만, 구현을 할 수 없었다.)
'잡설' 카테고리의 다른 글
ICPC 후기 (3) | 2022.10.08 |
---|---|
LearnOpenGL 1-4 Hello Triangle 연습문제 2 (0) | 2022.07.18 |
Learn OpenGL 2-4 Hello Triangle 연습문제 1 (0) | 2022.07.18 |
Learn OpenGL 2-5 Shader 연습문제 3 (0) | 2022.07.18 |
Learn OpenGL 2-5 Shader 연습문제 1 (0) | 2022.07.18 |