시작하며…

OGRE는 Object-Oriented Graphics Rendering Engine의 약자로써, 이미 아시는 분들은 저보다 훨씬 잘아시리라 믿습니다. 3D를 주 테마로 잡고 있는 개인이 운영하는 사이트를 보면 OGRE를 강한 열정을 가지고 분석하고 있는 분들이 많더군요. 하지만 저는 단지 수개월전에 OGRE를 공개소스로써 3D 그래픽 엔진 중 인기순위 1위를 차지하는 라이브러리 정도로만 알고 있었고, 그 당시 한번 컴파일이나 해보자는 마음으로 소스코드를 다운로드 받아 컴파일을 시도했지만, 실패하고 말았었습니다. 왜 실패했는지 그 이유는 모르겠습니다. 아마도 제 마음속에 별.. 그다지 OGRE에 대한 관심이 별로 없었지 않았나 싶습니다. 하지만 다행이 이미 컴파일된 데모들을 실행해 볼 수는 있었고, 단지 “좋군..”이 전부였습니다.


하지만 최근 우연이 Direct3D를 전문으로 다루는 어느 개인 블로그에 방문했데, 그 곳에 OGRE를 다루더군요. 또 다시 호기심이 발동한 저는 다시한번 컴파일이나 해볼 요량으로  OGRE의 공식 사이트인 www.ogre3d.org에 방문해 차근 차근 시도를 해보았습니다. 그런데 이번엔 왠일인지 쉽게 컴파일이 되더군요. 이상하게도 컴파일이 되니 제 마음속에서 이 놈을 깊이 있게 분석해보리라는 강한 욕심이 생겼습니다. 정말입니다. 컴파일 성공이라는 첫걸음이 성공하는 순간, 저도 전혀 예상하지 못했던 흥분과 욕심이 생기는겁니다!

제가 OGRE에서 얻고자 하는 바는 다음과 같습니다.

  • 많은 3D 그래픽 개발자로부터 찬사를 받고 있는 OGRE를 직접 사용해보고…
  • 최고 수준의 Object-Oriented를 지향한다는 Ogre의 개발자의 이 엔진으로부터 설계방법을  배우며…
  • OpenGL이나 DirectX보다 상위 수준의 API 통해 최신 그래픽 기술을 직접 코딩해 느껴보고, 점차 하위 수준으로 접근해 나간다.

위의 3가지 목적중에 2번째인 설계방법이 가장 큰 목표입니다. OGRE의 첫자인 “O”가 Object-Oriented인 만큼, 또한 OS 독립적이며 OpenGL과 Direct3D를 실행중에 유연하게 선택할 수 있는 설계방식이 무척 궁금합니다. 물론 제 나름대로의 이러저러하게 하면 되지 않을까 하는 다소 어설픈 아이디어는 있지만, 다른 개발자의 아이디어는 어떨까, 배우고 싶습니다.
위는 Ogre의 핵심 클래스의 관계도입니다. 간단해 보이기는 하지만 다른 부수적인 것들이 붙으면 매우 복잡하겠지요. Ogre를 분석하는 방법은 Ogre 사이트에서 제공하는 Tutorial과 Demo 소스를 분석하는 방식으로 하려 합니다. 제 스스로에게 건투를 빕니다.

Geometry의 공간연산

얼마전에 했던 작업이 공간연산이였는데, 쉽게 알고만 있었고 쉽게 사용해 왔던 공간연산이 직접 하나 하나 정확하게 구분하려고 보니, 상당이 헤깔린다는 것을 알게 되었다. 또한 공간연산하면 단지 교차하는지, 포함하는지와 같은 공간관계 연산만이 아니라 공간분석 연산도 포함되다는 사실을 알게 되어 정리하는 차원에서 글을 남긴다. 또한 작업했던 것에 대한 Test 실행파일을 올리니 여러분도 한번 실행해 시험해 보길 바란다. 참고로 공간분석 연산의 경우 결과가 Multi-Polygon인 경우 자랑스런 Memory 충돌에러가 발생한다는 점에 주의하기 바란다.

Geometry의 Spatial Relations

GIS에서 Geometry는 단순하게 Point, Polyline, Polygon으로 구분되며, 몇가지 제약사항을 갖게 되는데 이러한 Geometry를 Simple Feature라고 한다. 이러한 Simple Feature 둘 이상이 공간상에서 관계를 갖게 되는데, Spatial Relation이라고 한다. Spatial Relation의 종류는 모두 8가지 이다.

  • Equals – 두개의 Geometry가 동일한가?
  • Disjoint – 두개의 Geometry가 서로 격리되었는가?
  • Intersects – 두개의 Geometry가 교차하는가?
  • Touches – 두개의 Geometry가 접촉하는가?
  • Crosses – 두개의 Geometry가 횡단하는가?
  • Within – 하나의 Geometry가 다른 하나에 포함되는가?
  • Contains – 하나의 Geometry가 다른 하나를 포함하는가?
  • Overlaps –  – 두개의 Geometry가 부분적으로 겹치는가?

8가지의 관계들 중에는 서로 비슷한 연산이 있지만, 분명한 차이점을 가지고 있다. 예들 들어 두개의 폴리곤이 touch 관계을 갖는다면, intersect 관계도 항상 갖는다. 하지만 반대로 intersect 관계을 갖는다고 해서 touch 관계을 갖지는 않는다. 다른 예로 overlap과 intersect 연산의 경우, overlap이 참인 경우 항상 intersect도 참이지만, 반대로 intersect이 참이라고 해서 항상 overlap이 참이지는 않다. 하나의 폴리곤이 다른 하나의 폴리곤안에 완전이 포함되는 경우 intersect이 참이지만 overlap은 참이 아니기 때문이며, 이러한 경우는 contain이 참이거나 within이 참이기 때문이다. 여기서 contain과 within은 능동이냐, 수동이냐의 의미를 갖는다.



일단은 폴리곤에 대한 예를 들었지만 서로 다른 형태의 폴리곤과 폴리라인과의 관계를 생각하면 8가지의 관계의 필요성과 이해가 더욱 피부에 와닿을 것이다. 즉, crosses의 경우에는 폴리곤과 폴리라인의 경우에만 연산의 의미가 있다.

Geometry의 Spatial Analysis

GIS에서 Geometry의 Spatial Analysis는 모두 6가지이며 다음과 같다.

  • Buffer – 일정한 값만큼 Geometry를 키우거나 축소시킨 폴리곤을 얻는다.
  • Convex Hull – Geometry를 감싸는 최소넓이의 볼록한 폴리곤을 얻는다.
  • Intersection – 두개의 Geometry가 교차하는 부분에 대한 Geometry를 얻는다.
  • Union – 두개의 Geometry의 합쳐쳐 만들어진 하나의 Geometry를 얻는다.
  • Difference – 하나의 Geometry에서 다른 하나의 Geometry의 부분을 빼고 남은 Geometry를 얻는다.
  • Symmetric Difference – Union으로 구한 Geometry와 Intersection으로 구한 Geometry의 Difference이다.

위의 화면은 Test의 실행 화면인데, Union 연산, 20 Pixel 확장 Buffering 연산, Difference 연산에 대한 결과이다.

영화 “일본침몰”을 보고난 후 짧은 생각

아시아 경제대국, 일본제국은 지형적 불안정으로 1년안에 수몰될 운명에 처하게 됩니다. 그 1년 동안 엄청난 자연재해로 급속도로 일본은 바다 속으로 수몰되어져 갑니다. 스나미.. 화산폭팔.. 지진 등으로 정부에서는 자국의 국민을 중국, 미국 등의 나라로 이주시키게 된다는 내용이 있는데… 이 영화에서 일본이 바라보는 각 나라의 관점이 참으로 흥미롭습니다.


먼저 중국을 바라보는 일본의 시각은 “호의” 그자체입니다. 만약 일본침몰이 실제로 일어난다면 일본 국민이 이주할 최적의 나라는 중국이다라는 감독의 관점이 엿보입니다. 영화속 어디에도 중국에 대한 비관적인 면은 찾아 볼 수 없었습니다.


그리고 미국. 처음에 일본에 대한 미국의 관점은 긍정적이였지만, 후반부에는 “올 것이 왔다!”는 미국의 내적 의구심을 폭팔시킵니다. 일본은 미국이라는 나라는 단지 일본이 잘.. 나갈때나 동반자지.. 일본침몰이라는 재앙 이후에 그 태도가 반드시 돌변한다는 관점을 가지고 있었습니다.


그리고 마지막으로… 우리 한반도, 지금의 남한과 북한입니다. 영화 어디에도, 많은 이주 국가 리스트에 한반도는 거론되지 않습니다. 일본과 가장 가까운 나라가 한반도임에도 절대 거론되지 않습니다. 이주국으로 거론되기는 커녕… 한국과 북한으로 갈 경우, 불법 채류로 간주 한다는 대사가 아주 짧막하게 나올뿐입니다. 일본이 한반도를 바라 보는 시각이 여실이 들어나는 대목입니다.

여기서 저는, 우리가 일본을 바라보는 국민의 관점이, 일본이 우리를 바라보는 관점과 크게 다르지 않다고 생각되었습니다. 만약 일본침몰의 감독, 하구치 신지가 강경파이면서 호전적인 성격의 인물이였다면 재앙에 따른 자국민의 보호를 위해서 단순한 국민이주가 아닌, 가장 가까운 나라인 한반도 침략하는 시나리오로 영화를 전개시키지 않았을까 하는 생각이 들었습니다. 만약 그랬다면 훨씬 영화는 재미있었을 것이고, 좀더 솔직한 영화가 아니였을까 하는 아쉬움이 남습니다. 끝으로 국가에 대한 애국이 아닌, 한 여자와 가족을 위해 자신을 희생으로 이끈 젊은 청년에 대한 마음은 무척 감동스러웠습니다.