Вопрос

То, что я хочу сделать, это нарисовать (большой) ландшафт с помощью OpenGL.Итак, у меня есть набор вершин, скажем, 256 x 256, которые я сохраняю в объекте vertex buffer в видеопамяти.Я правильно триангулировал их, так что у меня есть индексный буфер для граней.

// vertexes
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vertexBufferId);
glVertexPointer(3, GL_FLOAT, 0, 0);
// textures
glBindBufferARB(GL_ARRAY_BUFFER_ARB, texCoordBufferId);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
// indexes
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexBufferId);
// draw it
glDrawRangeElements(GL11.TRIANGLES, 0, size - 1, size, GL_UNSIGNED_INT, 0);

Я также загрузил квадратную текстуру, которая должна быть применена к каждому треугольнику.Итак, у меня проблема с текстурными координатами:

Каждая вершина включена в 4 треугольника, что означает, что для нее требуется 4 текстурных координаты.Но glDrawRangeElements() требует столько же текстурных координат, сколько и вершин.

Так что я не вижу способа, как это сделать с VBO.Может быть, есть лучшая концепция для решения моей проблемы, или мне просто не хватает хорошей идеи.

Заранее благодарю.

Это было полезно?

Решение

Если ваша текстура должна повторяться (или зеркально отражать) саму себя в каждом квадрате, лучшим способом было бы использовать координаты текстуры, которые соответствуют номеру позиции (x, y) в вашем массиве.Например.для первой строки вершин используйте эти текстурные координаты:(0.0, 0.0), (1.0, 0.0), (2.0, 0.0)...(255.0, 0.0).

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top