Текстурирование объектов буфера вершин

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

// 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. Может быть, есть лучшая концепция решения моей проблемы, или мне просто не хватает хорошей идеи.

Заранее спасибо.


person Stefan Teitge    schedule 18.12.2008    source источник


Ответы (2)


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

person Maurice Gilden    schedule 18.12.2008

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

person Razzupaltuff    schedule 29.12.2008