OpenGL: Как разработать эффективную систему рендеринга, используя массивы вершин с сортировкой по глубине?

Люди постоянно говорят мне использовать хотя бы вершинные массивы. Но я думаю, что это не лучшая идея, поскольку я использую glPushMatrix () с glTranslatef / glRotatef для позиционирования объекта в трехмерном мире.

Итак, следует ли мне прекратить использовать glPushMatrix () и вычислить позиции повернутых / перемещенных вершин в мире «вручную», а затем поместить данные их вершин в массив вершин и затем отрендерить все сразу?

Но,

Правильно ли я делаю?

Кроме того, как мне разработать структуру данных для объектов, которые я буду сортировать? Например, хорошо ли использовать std :: vector для хранения данных вершин для каждого объекта? Или есть альтернатива лучше? Я думал, что std :: vector для хранения всех этих данных будет выглядеть так:

struct GameObject {
    int TexID;
    float z; // we will sort by this
    vector<VTCNStruct> VertexData; // store each point of the object here (including color/normal/texcoord points).
};

vector<GameObject> GameObjectBuffer; // push all sortable objects here

Кроме того, на шаге 4: можно ли использовать уже существующий std :: vector в этом случае? У меня была идея, что я должен использовать необработанные массивы, такие как new float [100] , для отправки массива вершин на мой графический процессор, или я могу каким-то образом использовать уже существующий отсортированный std :: вектор здесь каким-то образом (эффективно) без создания нового буфера каждый раз при изменении идентификатора текстуры?

5
задан Newbie 13 December 2010 в 00:19
поделиться