Текстурирование объектов вершинного буфера - PullRequest
2 голосов
/ 18 декабря 2008

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

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

Ответы [ 2 ]

3 голосов
/ 19 декабря 2008

Если ваша текстура должна повторяться (или зеркально отражаться) в каждом квадре, лучшим способом будет использование координат текстуры, соответствующих номеру позиции (x, y) в вашем массиве. Например. для первой строки вершин используйте эти текстурные координаты: (0,0, 0,0), (1,0, 0,0), (2,0, 0,0) ... (255,0, 0,0).

0 голосов
/ 29 декабря 2008

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

...