Я пытался отрендерить куб и применить единую текстуру ко всем граням. а также использовать как можно меньше вершин, передавая индексы вершин грани. пример:
Вершины:
static final float FACE_VERTEX[] = {
// front
0.0f, 1.0f, 1.0f, //0
0.0f, 0.0f, 1.0f, //1
1.0f, 0.0f, 1.0f, //2
1.0f, 1.0f, 1.0f, //3
//back
1.0f, 1.0f, 0.0f, //4 - 3
1.0f, 0.0f, 0.0f, //5 - 2
0.0f, 0.0f, 0.0f, //6 - 1
0.0f, 1.0f, 0.0f, //7 - 0
};
Индексы:
static final int FACE_INDEX[] = {
//front
0,1,2, 0,2,3,
//back
4,5,6, 4,6,7,
//left
7,6,1, 7,1,0,
//right
3,2,5, 3,5,4,
//top
4,7,0, 4,0,3,
//bottom
1,6,5, 1,5,2
};
данные наложения текстуры:
final int textureCoordinateData[] =
{
// Front face
0,0, 0,1, 1,1, 1,0,
//back
0,0, 0,1, 1,1, 1,0,
//left
0,0, 0,1, 1,1, 1,0,
//right
0,0, 0,1, 1,1, 1,0,
//top
0,0, 0,1, 1,1, 1,0,
//bottom
0,0, 0,1, 1,1, 1,0,
//top
0,0, 0,1, 1,1, 1,0,
//bottom
0,0, 0,1, 1,1, 1,0,
};
Текстура рендерится со всех сторон куба, кроме верхней и нижней. рендерится только первый ряд пикселей лицевой грани по всей верхней и нижней граням (см. скриншот):
Я использую VBO для хранения данных вершин/индексов/текстур в графическом процессоре и рендеринга с помощью
glDrawElements(GL_TRIANGLES, indexLength, GL_UNSIGNED_INT, 0);
Однако эта проблема связана с тем, что данные текстуры должны быть сопоставлены с переданными данными вершин (что несколько раздражает для модели куба) и не вычисляются по индексу.
Мои вопросы будут такими: - Есть ли способ сохранить данные вершин как можно меньше и сопоставить текстуру с данными индекса? - Если я создам 36 вершин (некоторые из них повторяются) для решения проблемы отображения текстур, но я создам правильные индексы для рендеринга куба, будет ли это все равно быстрее, чем использование glDrawArrays
? или мне все равно пойти с glDrawArrays
и уничтожить данные индексации?
связанный вопрос (который не ответил на мой вопрос):
OpenGL ES - все карты текстур грани восьмивершинного куба?
Если вы прочитали первый комментарий к ответу:
Что вы имеете в виду, вы должны использовать 24 вершины? Если вам нужно дублировать вершины, какой смысл использовать индексный буфер, если вы все еще отправляете повторяющиеся данные на графический процессор?