일단, 백일님의 그 풍부한 정보에 항상 감사드립니다.
오늘도 사실 백일님이 좋은 정보를 주실 줄 알고 글을 썼습니다.
제가 지금까지 쓰던건 예전에 구입했던 C++ Power Technic이라는 책에 포함된 라이브러리인데요.. 그럭저럭 꽤 쓸만합니다.
MTL은 봤었는데.. 그건 전형적인 templete으로 구성된 stl류의 라이브러리죠?
저도 평상시에 stl의 vector등은 자주 쓰지만 이번 프로젝트에 사용하기는 어렵다는 결론이었습니다. 제가 지금 원하는 것은 4x1 벡터의 경우 x, y, z, w 네개의 맴버만을 가지고 있어서 클래스를 통째로 배열화 할 경우 바로 메트릭스로 전환되는 식의 접근방식을 원하는데 MTL은 일단 이런 방식은 안되는 분위기 입니다.
게다가 호모지니어스 좌표계에서는 일반 벡터연산과 좀 다른 규칙이 부여됩니다.
예를 들어
[x1, y1, z1, 1]T + [x2, y2, z2, 1]T = [x1+x2, y1+y2, z1+z2, 1]T
이런식의 연산이 필요하거든요.
마지막 w 값은 항상 1로 유지가 되어야 하는.. 좀 특이합니다. 일반적인 벡터 연산을 하면 마지막 값이 2가 되죠? 이런 사소한 문제서부터..
수치계산에서 Matrix연산은 주로 Matrix의 수가 많은게 아니라 Matrix의 수는 상대적으로 소수, 대신 row/col의 크기가 어마어마하게 큰 메트릭스의 각종 연산을 얼마나 효율적으로 수행하는가..에 초점이 맞춰져 있죠. 그래픽스쪽에선 약간 초점이 다른 것이 주로 고속의 벡터 내적/외적 연산, 행렬/벡터간의 Product연산.. 4x4메트릭스에 대한 역행렬.. 정도가 많이 쓰입니다.
만일 파라메트릭 모델링을 지원하려 한다면 그때는 일반 수치연산에서 사용하는 대용량의 메트릭스가 필요하게 되죠. 파라메트릭 모델링에 최적설계 알고리즘을 적용하는 경우도 있기 때문에 이때는 희소행렬도 요긴하게 쓰일 수 있겠네요.
알려주신 자료들을 아직 다 검토해 보지는 못했으나 몇개 확인해 본 것과 설명을 기초로 판단하건데.. 주로 수치연산쪽에 적합하지 않나.. 싶네요.
OpenGL이나 DirectX의 경우 각종 vertex정보나 matrix정보들은 일반배열을 통해 서로 교환되기 때문에 기존 C 스타일의 프로그래밍에서는 임의의 배열에 대한 행렬연산을 수행할 수 있는 함수셋을 구성하는 것이 일반적이었던 것 같습니다. 뭐, 각종 책들을 봐도 비슷하게 해결하고 있죠.
예전에는 잘 모를때는 저도 이런 식으로 주로 만들었는데.. 이렇게 만들면 정말 나중에 감당이 안됩니다. 거의 짜장면의 극을 달리게 되는..
아무튼.. 좋은 정보 주셔서 다시한번 감사드리구요, 그 사이트 가 보니까 다른 여러가지 라이브러리를 많이 제공하는 것 같군요. 찬찬히 좀 살펴봐야겠습니다. 딱 맞는 라이브러리까지는 아니더라도 좋은 아이디어를 좀 얻을 수 있으면 좋겠네요.
|