Example of Earth map by using import.
MGL code:
import dat 'Equirectangular-projection.jpg' 'BbGYw' -1 1 subplot 1 1 0 '<>':title 'Earth in 3D':rotate 40 60 copy phi dat 'pi*x':copy tet dat 'pi*y/2' copy x cos(tet)*cos(phi) copy y cos(tet)*sin(phi) copy z sin(tet) light on surfc x y z dat 'BbGYw' contp [-0.51,-0.51] x y z dat 'y'
C++ code:
void smgl_earth(mglGraph *gr) { mglData dat; dat.Import("Equirectangular-projection.jpg","BbGYw",-1,1); // Calc proper 3d coordinates from projection mglData phi(dat.nx,dat.ny); phi.Fill(-M_PI,M_PI); mglData tet(dat.nx,dat.ny); tet.Fill(-M_PI/2,M_PI/2,'y'); mglData x(dat.nx,dat.ny), y(dat.nx,dat.ny), z(dat.nx,dat.ny); #pragma omp parallel for schedule(static) for(long i=0;i<dat.nx*dat.ny;i++) { x.a[i] = cos(tet.a[i])*cos(phi.a[i]); y.a[i] = cos(tet.a[i])*sin(phi.a[i]); z.a[i] = sin(tet.a[i]); } gr->SubPlot(1,1,0,"<>"); if(big!=3) gr->Title("Earth in 3D"); gr->Rotate(40,60); gr->Light(true); gr->SurfC(x,y,z,dat,"BbGYw"); mglData vals(1); vals.a[0]=-0.51; gr->ContP(vals, x,y,z,dat,"y"); }