Как нарисовать повторяющуюся текстуру по контуру линии/полигона?

Вот что я имею в виду. Причем патерн не должен начинаться заново с каждой вершины, он должен продолжаться. Приметно также, как работает пунктирная линия.

Насколько я понял, привязать текстуру произвольной высоты непосредственно к линии невозможно. Для этого следует триангулировать каждый сегмент линии в прямоугольник и уже на него накладывать текстуру.

Так я и сделал. Ширина при этом задается.введите сюда описание изображения

Рисуя полученный массив точек через GL_TRIANGLE_STRIP - получаю линию произвольной ширины. Осталось только наложить текстуру правильным образом. Но с текстурными координатами я совсем запутался. Не могу понять как вершины соотносятся в текстурными координатами, в каком порядке происходит отрисовка (в порядке указания точек, или нет?). Пытался затекстурировать хотя бы один сегмент (4 точки) случайной картинкой c несколькими повторениями, но запутался еще сильнее. введите сюда описание изображения

QVector <float> vertex =  {100, 150, 100, 50, 469.098, 150, 530.902,50}; 
QVector<float> tex_coord = { 0,0,4,0,0,1,1,1};

введите сюда описание изображения

Не понимаю почему она повторяется сразу по двум осям, хотя я указал 4 только по x. Почему во втором треугольнике она повернута, и почему четвертая текстурная координата вообще ни на что не влияет, ее можно просто удалить. Текстурные координаты передаются след. образом. Вершинный шейдер:

attribute vec2 a_coord;                                             
varying lowp vec2 v_coord;
...
void main() {
...
v_coord = a_coord;
}

Фрагментный:

uniform sampler2D u_tex;
varying lowp vec2 v_coord;
void main() {
gl_FragColor = texture2D(u_tex, v_coord);
}

Передача в шейдер:

glGenBuffers(1, &tex_coord_buff);
glBindBuffer(GL_ARRAY_BUFFER, tex_coord_buff);
glBufferData(GL_ARRAY_BUFFER, tex_coord.size() * sizeof(float), tex_coord.data(), GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE,  sizeof(float), (void*)0);

Ответы (0 шт):