По сути, вам не нужно ничего особенного.Пространство координат текстуры колеблется от нуля до единицы.Поэтому выберите промежуточные значения для промежуточных вершин.Я не могу объяснить это более подробно без изображения, поэтому лучшее, что я могу сделать, это указать вам на эту статью: UV mapping , это хорошая отправная точка.Надеюсь, это поможет вам в начале.
Вот мое предположение:
{
double lng = 2 * M_PI * (double) (j - 1) / longs;
double x = cos(lng);
double y = sin(lng);
double s1, s2, t;
s1 = ((double) i) / halfLats;
s2 = ((double) i + 1) / halfLats;
t = ((double) j) / longs;
glTexCoord2d(s1, t);
glNormal3d(x * zr0, y * zr0, z0);
glVertex3d(x * zr0, y * zr0, z0);
glTexCoord2d(s2, t);
glNormal3d(x * zr1, y * zr1, z1);
glVertex3d(x * zr1, y * zr1, z1);
}
Не забудьте правильно установить текстуру в OpenGL.Пример вызова с текстурой:
glActiveTexture(GL_TEXTURE0);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
// texture must be bound & enabled
texture.bind();
texture.enable();
drawHemisphere(1, 40, 40);
texture.disable();
Я использовал Java + JOGL для тестирования, так что это не однозначное решение C ++, но концептуально оно должно быть таким же.По крайней мере, у вас есть правильные glTexCoord2d()
звонки.