Упаковка индексов вершин и текстурных координат вместе - PullRequest
2 голосов
/ 03 января 2012

Я пытаюсь визуализировать куб с текстурой, как часть моего самообучения (или, точнее, преподавания в 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 между позициями вершин и координатами текстуры ... У меня естьПонятия не имею, как бы я переписал свой вершинный шейдер.

Или я должен сделать это так, как это делает учебник (упаковать позиции вершин и координаты текстуры вместе) и просто повторить вершины, где это необходимо?

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

1 Ответ

1 голос
/ 03 января 2012

Вы упали на общее заблуждение, идентифицируя вершины только с их положением.Однако это не то, чем является вершина.

В действительности вершина - это полная комбинация всех ее атрибутов, то есть координат положения, нормали и текстуры.Так что, если координаты текстуры различаются, у вас будет совсем другая вершина с собственным индексом.Таким образом, вы должны продублировать данные о положении, нормале и т. Д., За исключением этой другой координаты текстуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...