Я пытаюсь визуализировать куб с текстурой, как часть моего самообучения (или, точнее, преподавания в SO).
Я нашел этот пример онлайн, который упаковываеткоординаты вершин и текстурные координаты в один массив, например так:
Vertex Vertices[4] = { Vertex(Vector3f(-1.0f, -1.0f, 0.5773f), Vector2f(0.0f, 0.0f)),
Vertex(Vector3f(0.0f, -1.0f, -1.15475), Vector2f(0.5f, 0.0f)),
Vertex(Vector3f(1.0f, -1.0f, 0.5773f), Vector2f(1.0f, 0.0f)),
Vertex(Vector3f(0.0f, 1.0f, 0.0f), Vector2f(0.5f, 1.0f)) };
Я думаю, это работает для объекта в форме пирамиды, но это не так хорошо работает для моего куба.Проблема в том, что мне нужно использовать другую текстурную координату для той же вершины, которая используется совместно с другим лицом.
Поэтому я подумал: «О, я знаю! Я просто упакую координаты текстуры вместо индексов!»и я весело создал мою структуру данных, сопоставляя индексы с координатами текстуры, но теперь я наткнулся на загадку: индексы должны идти в GL_ELEMENT_ARRAY_BUFFER
, а координаты текстуры должны идти в GL_ARRAY_BUFFER
.
Значит ли это, что я не могу упаковать эти данные в один буфер?Я должен разделить массив индекса и массив координат текстуры на две отдельные структуры?
Кроме того, я только что понял, что больше не будет отображения 1: 1 между позициями вершин и координатами текстуры ... У меня естьПонятия не имею, как бы я переписал свой вершинный шейдер.
Или я должен сделать это так, как это делает учебник (упаковать позиции вершин и координаты текстуры вместе) и просто повторить вершины, где это необходимо?
Я думал, что основная идея разделения индексов и позиций вершин в первую очередь заключается в том, чтобы уменьшить избыточность данных, но теперь я должен добавить эту избыточность обратно, как только я захочу использовать текстуры?