Один подход как в принятом ответе.В коде, генерирующем массив атрибутов вершин, у вас будет такой код:
// FOR EVERY TRIANGLE
const float threshold = 0.7;
if(tcoords_1.s > threshold || tcoords_2.s > threshold || tcoords_3.s > threshold)
{
if(tcoords_1.s < 1. - threshold)
{
tcoords_1.s += 1.;
}
if(tcoords_2.s < 1. - threshold)
{
tcoords_2.s += 1.;
}
if(tcoords_3.s < 1. - threshold)
{
tcoords_3.s += 1.;
}
}
Если у вас есть треугольники, которые не выровнены по меридиану, вам также понадобится glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
.Вам также необходимо использовать glDrawArrays
, так как вершины с одинаковым положением будут иметь разные координаты текстуры.
Я думаю, что лучший способ - это устранить корень всего зла, в данном случае это интерполяция координат текстуры.,Поскольку вы в основном знаете все о своей сфере / эллипсоиде, вы можете вычислять координаты текстуры, нормали и т. Д. В фрагментном шейдере на основе положения.Это означает, что код вашего процессора, генерирующий атрибуты вершин, будет намного проще, и вы сможете снова использовать индексированное рисование.И я не думаю, что такой подход грязен.Это чисто.