Как я могу текстурировать GL_TRIANGLE_STRIP?

1

У меня есть несколько примитивов 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 был бы приятным.

Теги:
opengl
lwjgl

1 ответ

1
Лучший ответ

Укажите координаты текстуры для каждой из вершин примитива: для каждого вызова 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();
  • 0
    Это не сработало. Вместо этого он вышел с белым выводом. Кроме того, ничего больше не отображается. Я что-то пропустил? gyazo.com/054f1d005e0922a1c4d95a7290445c9a Даже мой (Зеленый) корабль синий! И я вижу только небольшую часть местности. Без вашего кода для текстурированной местности он обычно выглядит следующим образом: i.gyazo.com/757549850eaebf8123c24afb24ffdac2.png Вот код для вставки : pastebin.com/JVRxPM9k Было бы здорово, если бы вы могли помочь!
  • 2
    Порядок звонков здесь неправильный. glTexCoord2f() должны быть перед соответствующими glVertex3f() .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню