이놈의 normal은 언제 마무리 하려나...
연속되는 회의와 각종 행사(?) 참석에 진행이 더디다. ㅜ.ㅜ
오늘은 토요일 이니 건드는 사람이 없어야 할텐데...!
Normal을 계산하려고 보니, 한가지 더 고려해야 할 사항이 생겼다.
바로 normal의 방향! normal은 면에 수직하는 vector 이므로, 당연히 triangle의 외부와 내부로(이렇게 구분하는게 적절한지 모르겠지만) 향하는 두 개의 normal을 갖게 된다.
그리고 triangle에 대해 normal을 계산할 때는 세 개의 vertex를 가지고 2개의 vector를 만들어 외적(cross product)를 해서 구하게 되는데, 어떤 벡터의 조합과 어떤 순서로 외적을 하느냐에 따라 이 normal의 방향이 결정된다. (즉 A x B != B x A)
그래서, vector들을 어떤 순서로 외적에 적용해야 할지가 고민이었다.
구글링을 해 보면, 순서가 중요하므로 외부로 향하는 normal을 계산해야 하며, 모든 triangle에 동일한 규칙을 적용해야 한다는 내용밖에 찾을 수 없었다. (검색능력의 부족 -_-;)
그래서, (머리가 나쁘면 손발이 고생하는 법!) 그냥 무식하게 두 개의 삼각형으로 사각형을 만들어놓고, 엑셀에서 vector들의 모든 순서 조합으로 외적을 구해 보았다.
그 결과에서 다음과 같은 결론(?)을 얻게 되었다.
하나의 vertex가 vector의 기준(출발?)점이 되는 두 개의 vector를 외적할 때, 오른손의 네 손가락을 하나의 vector 방향과 일치 시켰을 때, 엄지손가락이 가리키는 방향이 normal의 방향이다!
어설픈 그림으로 설명 해 보자면,
A
/
/
/
B ------- C
BA x BC를 계산(외적) 한다고 생각하면,
네 손가락(혹은 손날?)을 BA와 나란히 놓고, 네 손가락의 끝을 A 방향으로 향하도록 하면, 엄지손가락은 모니터 안쪽을 가리키게 되고, 이것은 OpenGL의 좌표계에서 -Z 방향에 해당한다.
즉, -Z 방향으로 향하는 normal이 계산 된다는 이야기 이다.
반대로, BC x BA를 계산(외적)한다고 생각하면,
네 손가락(혹은 손날?)을 BC와 나란히 놓고, 네 손가락의 끝을 C 방향으로 향하도록 하면, 엄지손가락은 모니터 바깥쪽, 즉 내 눈을 가리키게 되고, 이것은 OpenGL의 좌표계에서 +Z 방향에 해당한다.
즉, +Z 방향으로 향하는 normal이 계산 된다는 이야기 이다.
학부 혹은 대학원의 컴퓨터 그래픽 강의에서 가르쳐주는 내용일 수 도 있고, 널리 알려져 있는 내용인지도 모르겠는데, (사실, 아직 항상 적용되는 맞는 내용인지에 대한 확신도 없는 상태 ^^;) 개인적으로 이러한 강의를 들어본 적이 없어서 이러한 삽질을 해야 한다. orz
그래서, 요즘 iTunes U에서 발견한 Harvard에서 제공하는 E234 강좌를 보고 있는데, 쉽지는 않지만 재미도 있고 도움도 많이 되는 것 같다. 이제 3분의 1정도 봤는데, 다 보고나면 컴퓨터 그래픽에 대한 윤곽이 좀 잡히려나? 아직 늦지 않았다고 생각 하지만, 직작다니면서 혼자 보고 공부하는게 쉽지는 않은듯. 그래도 재미있으니 다행이다.ㅋ
'3D그래픽' 카테고리의 다른 글
도움이 될만한 책을 반견한 것 같다! (0) | 2012.07.03 |
---|---|
Per-fragment lighting에서 alpha 값은 어디서 와야(?) 하는가!? (0) | 2012.06.18 |
[퍼온글] Calculating Normals and Tangent Space (0) | 2012.06.14 |
Separable Subsurface Scattering (0) | 2012.02.08 |
Graphics and Game Gems Database (0) | 2012.01.20 |