У меня есть несколько примитивов GL_TRIANGLE_STRIP, которые выглядят так:
glNewList(heightmapDisplayList, GL_COMPILE);
for (int z = 0; z < data.length - 1; z++) {
glBegin(GL_TRIANGLE_STRIP);
for (int x = 0; x < data[z].length; x++) {
glVertex3f(x, data[z][x], z);
glVertex3f(x, data[z + 1][x], z + 1);
}
glEnd();
}
glEndList();
Как мне текстурировать это? Я легко знаю, как текстурировать такие вещи, как GL_QUADS
, но я не знаю, куда помещать glTexCoord2f()
с треугольной полосой (и итерацией и т.д.).
Я использую lwjgl, поэтому ответ в java был бы приятным.
Укажите координаты текстуры для каждой из вершин примитива: для каждого вызова glVertex3f должен быть соответствующий вызов glTexCoord2f. Что касается фактических значений координат текстуры, это зависит от того, чего вы хотите достичь. Простым способом было бы получить двумерные текстурные координаты (s, t) из индексов, используемых для треугольных полос. Вот пример реализации этого:
glNewList(heightmapDisplayList, GL_COMPILE);
for (int z = 0; z < data.length - 1; z++) {
glBegin(GL_TRIANGLE_STRIP);
// The t texture coordinate for z and z + 1
float t0 = (float)z / (data.length - 1); // t0 in [0,1]
float t1 = (float)(z + 1) / (data.length - 1); // t1 in [0,1]
for (int x = 0; x < data[z].length; x++) {
// The s texture coordinate for x
float s = (float)x / (data[z].length - 1); // s in [0, 1]
glTexCoord2f(s, t0);
glVertex3f(x, data[z][x], z);
glTexCoord2f(s, t1);
glVertex3f(x, data[z + 1][x], z + 1);
}
glEnd();
}
glEndList();
glTexCoord2f()
должны быть перед соответствующимиglVertex3f()
.