지난 게시물인 [1]에서 이어지는 내용입니다. 만약에 지금 사용중인 세계전도에서 대륙과 바다만 달랑 있는 것이 좀 허전해 보인다면, 경위도선도 좀 추가한 버전으로 지도를 다시 그려서 저장하면 됩니다. 즉 my_world_map.png를 다음과 같이 그린다면, 경위도선이 추가되어서 좀 더 그럴싸한 느낌의 세계전도를 다음 그림과 같이 얻을 수 있게 됩니다.
win = WINDOW(DIMENSIONS=[1200, 600])
m1 = MAP('Geographic', BACKGROUND_COLOR='Dodger Blue’, $
ASPECT_RATIO=0, MARGIN=0, /CURRENT)
m1.LIMIT = [-90, -180, 90, 180]
m2 = MAPCONTINENTS(FILL_COLOR='Gold', THICK=2)
;m1.MapGrid.Hide = 1
m1.MapGrid.Linestyle = 2
m1.MapGrid.Font_Size = 12
win.Save, 'my_world_map.png', WIDTH=1200
win.Close
이렇게 얻어진 세계전도를 아까와 같은 방법을 사용하여 구체 폴리곤상에 맵핑하고 XOBJVIEW로 그 모습을 본다면 다음 그림과 같을 것입니다.
그리고 여기에 한가지 요소만 더 추가해본다면, 예전에 설명했던 특정 경위도 위치의 도시를 심볼로 표시하고 도시명까지 삽입하는 방법을 동원해볼 수 있습니다. 앞서 IDL에서 지도의 표출 및 활용법에 관하여 [10]에서 설명되었던 내용을 토대로 하여 서울 및 LA를 표시하는 내용까지 넣는다면 다음과 같은 방식이 됩니다. 이렇게 얻어진 세계전도를 마찬가지 방법으로 구체 폴리곤상에 맵핑하고 그 결과를 XOBJVIEW로 본다면 다음 그림과 같을 것입니다.
win = WINDOW(DIMENSIONS=[1200, 600])
m1 = MAP('Geographic', BACKGROUND_COLOR='Dodger Blue’, $
ASPECT_RATIO=0, MARGIN=0, /CURRENT)
m1.LIMIT = [-90, -180, 90, 180]
m2 = MAPCONTINENTS(FILL_COLOR='Gold', THICK=2)
;m1.MapGrid.Hide = 1
m1.MapGrid.Linestyle = 2
m1.MapGrid.Font_Size = 12
sym1 = SYMBOL(126.97, 37.57, 'circle', /DATA, SYM_SIZE=0.6, $
SYM_COLOR='black', /SYM_FILLED, SYM_FILL_COLOR='crimson')
tx1 = TEXT(126.97, 38.57, 'Seoul', /DATA, $
FONT_STYLE='bold', FONT_SIZE=12, FONT_COLOR='blue', $
ALIGNMENT=0.5,/FILL_BACKGROUND, FILL_COLOR='white')
sym2 = SYMBOL(-118.25, 34.05, 'circle', /DATA, SYM_SIZE=0.6, $
SYM_COLOR='black', /SYM_FILLED, SYM_FILL_COLOR='crimson')
tx2 = TEXT(-118.25, 35.10, 'LA', /DATA, $
FONT_STYLE='bold', FONT_SIZE=12, FONT_COLOR='blue', $
ALIGNMENT=0.5,/FILL_BACKGROUND, FILL_COLOR='white')
win.Save, 'my_world_map.png', WIDTH=1200
win.Close
결국은 구체 폴리곤상에 입힐 지도 그림을 어떤 식으로 그리느냐에 따라 최종적인 모습이 좌우되기 때문에, 기본적으로는 바탕 지도를 어떻게 하면 내가 원하는 방향으로 보기 좋게 잘 그리느냐가 관건이 된다고 볼 수 있습니다. 이와 같이 어떤 3차원 폴리곤상에 마치 옷을 입히듯이 이미지를 입히는 과정을 전문 용어로 Texture Mapping이라고 합니다. 말 그대로 옷감을 입힌다는 의미이고, 결국은 형체만 존재하던 폴리곤 객체에 어떤 이미지를 입힘으로써 좀 더 현실적인 모습을 띄도록 하는 방법이다 정도로 이해를 해두면 좋을 것 같습니다.
따라서 이 개념을 바탕으로 좀 더 응용 범위를 확장해보면, 어떤 구체 폴리곤이 있고 그 위에 맵핑할 적절한 이미지가 존재한다면 얼마든지 위의 방법을 응용하는 것이 가능하다는 얘기가 됩니다. 예를 들어서, 달(Moon)이라는 천체에 대하여 표면 촬영을 하여 얻은 달 표면 이미지가 있는 경우를 생각해볼 수 있습니다. 즉, 달의 전도(Moon Map)를 이미지로 갖고 있다면 구체 폴리곤상에 그대로 입힐 수 있습니다. 예를 들어 다음 그림과 같은 모습을 한 달의 전도(Moon Map) 이미지를 파일(moon_map.jpg)로 갖고 있다고 합시다. 이러한 종류의 이미지들은 요즘은 Google 검색 등의 방법으로 비교적 쉽게 찾을 수 있습니다. 다른 행성들(금성, 화성 등)의 경우도 아마 비슷할겁니다.
어차피 이 이미지는 달에 해당되는 구체 폴리곤을 구현하고 그대로 입히면 되므로, 앞서 우리가 사용했던 방법을 그대로 사용하되 이미지 파일만 바꾸면 됩니다. 즉, 프로그램의 내용은 다음과 같습니다. 그리고 이와 같이 달의 표면 이미지가 맵핑된 구체 폴리곤의 모습은 XOBJVIEW로 다음 그림 42와 같이 볼 수 있게 됩니다.
ifile = 'moon_map.jpg'
img = READ_IMAGE(ifile)
MESH_OBJ, 4, vertices, polygons, REPLICATE(0.5, 101, 101)
oImage = OBJ_NEW('IDLgrImage', img)
vector = FINDGEN(101)/100.
texure_coordinates = FLTARR(2, 101, 101)
texure_coordinates[0, *, *] = vector # REPLICATE(1., 101)
texure_coordinates[1, *, *] = REPLICATE(1., 101) # vector
oSphere = OBJ_NEW('IDLgrPolygon', SHADING=1, DATA=vertices, $
POLYGONS=polygons, COLOR=[255, 255, 255], $
TEXTURE_COORD=texure_coordinates, $
TEXTURE_MAP=oImage, /TEXTURE_INTERP)
XOBJVIEW, oSphere, XSIZE=600, YSIZE=600
결국 이와 같이 구체 폴리곤을 구현하고 그 위에 이미지를 맵핑하는 작업은 우리 지구뿐 아니라 다른 행성들을 좀 더 입체적으로 가시화하는데 있어서 매우 유용하고, IDL에서도 비교적 간단한 프로그래밍에 의하여 이러한 작업이 가능하다는 점을 염두에 두면 좋을 것 같습니다.
'IDL > Mapping' 카테고리의 다른 글
Lambert Conformal Conic 투영법 지도의 또 다른 표출 방법 (6) | 2016.08.11 |
---|---|
LL_ARC_DISTANCE 함수의 사용법 (0) | 2015.08.28 |
지도 이미지를 3차원 구체(Sphere) 폴리곤상에 입히기 [1] (0) | 2015.06.29 |
IDL에서 지도의 표출 및 활용법에 관하여 [13] (0) | 2015.05.12 |
IDL에서 지도의 표출 및 활용법에 관하여 [12] (0) | 2015.05.07 |