; docformat = 'rst' ;+ ; Example of using a texture map on a surface. ; ; :Keywords: ; renderer : in, optional, type=long ; set to 0 for hardware rendering, 1 for software rendering ;- 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