I’m trying to fit a world texture on a sphere. It’s almost working, but texture is repeated twice. This is my mapping code:
v = acosf(sp->coll->z / (double)sp->radius) / M_PI ;
u = asinf(sp->coll->y / ((double)sp->radius * sinf(v * M_PI))) / M_PI;
u += 0.5;
// u and v are between 0 and 1
i = (int)((float)texture->xsize * (v - ((int)v)));
j = (int)((float)texture->ysize * (u - ((int)u)));
this->color = texture->map[j][i];
What might be causing this issue?
I think the problem is that you’ve lost some sign information in the u calculation.
There are points on the sphere for a given z and y pair. To resolve this ambiguity you should use
atan2instead ofasin. The code would look roughly like this:You may need to normalise the arguments to
atan2– but in most implementations you do not need to.