pro mg_surfacetexture_demo, renderer=renderer
compile_opt strictarr
demFilename = filepath('worldelv.dat', subdir=['examples', 'data'])
dem = bytarr(360, 360)
openr, lun, demFilename, /get_lun
readu, lun, dem
free_lun, lun
maskFilename = filepath('continent_mask.dat', subdir=['examples', 'data'])
mask = bytarr(360, 360)
openr, lun, maskFilename, /get_lun
readu, lun, mask
free_lun, lun
viewgroup = obj_new('IDLgrViewGroup')
view = obj_new('IDLgrView')
viewgroup->add, view
model = obj_new('IDLgrModel')
view->add, model
landColor = [150, 100, 20]
waterColor = [200, 200, 255]
textureImage = bytarr(3, 360, 360)
textureImage[0, *, *] = mask * landColor[0] + (1 - mask) * waterColor[0]
textureImage[1, *, *] = mask * landColor[1] + (1 - mask) * waterColor[1]
textureImage[2, *, *] = mask * landColor[2] + (1 - mask) * waterColor[2]
texture = obj_new('IDLgrImage', textureImage)
viewgroup->add, texture
surface = obj_new('IDLgrSurface', dem, style=2, $
color=[255, 255, 255], shading=1, $
texture_map=texture, texture_interp=1)
model->add, surface
lightmodel = obj_new('IDLgrModel')
view->add, lightmodel
light = obj_new('IDLgrLight', type=2, location=[-1, 1, 1])
lightmodel->add, light
surface->getProperty, xrange=xr, yrange=yr, zrange=zr
xc = mg_linear_function(xr, [-1.2, 1.2])
yc = mg_linear_function(yr, [-1.2, 1.2])
zc = mg_linear_function(zr, [-0.1, 0.1])
surface->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc
model->rotate, [1, 0, 0], -90
model->rotate, [0, 1, 0], 30
model->rotate, [1, 0, 0], 50
win = obj_new('IDLgrWindow', dimensions=[400, 400], graphics_tree=viewgroup, $
renderer=renderer)
win->draw
end