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");
}