Как сохранить лицо в памяти - PullRequest
0 голосов
/ 16 декабря 2010

Я пытался выяснить это, но не могу найти способ сделать это, что кажется разумным, и, кажется, ничто на самом деле не объясняет этого, я могу найти множество вещей о том, как делать моделирование и как работать с лицами,но ничего о том, с кем они могут быть сохранены в памяти для работы.В основном я смотрел на obj, а все остальное легко, в основном это всего лишь массивы для хранения всего этого, но лица, единственный способ, с помощью которого я мог работать с ними, - это сохранять детали вершин в объекте, иличитать их из файла каждый раз, но это не может быть правдой?Кажется безумным использование объекта для каждого лица, но я не могу думать ни о каком другом!Даже просто книгу, чтобы посмотреть или что-нибудь, чтобы просто указать мне правильное направление, потому что все, кажется, пропускает все это.Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

Лицо обычно состоит из трех или более соединенных вершин.Это означает, что вы можете сохранить каждую грань в виде списка вершин (или индексов вершин), из которого она состоит.обычно), вы можете свернуть его в один список / вектор / массив:

[/* face 1 */ v0 v1 v2 /* face 2 */ v3 v4 v5]

Википедия может передать это лучше, чем я.

1 голос
/ 17 декабря 2010

То, что вы ищете, это массивы вершин. Как это работает, каждый объект содержит массив вершин и цвет. Нормы для вершин хранятся в этом же массиве (vertexX, vertexY, vertexZ, normalX, normalY, normalZ). Когда вы хотите визуализировать ваши объекты, вы просматриваете массив объектов и визуализируете каждый объект, как показано ниже:

float plane[] = {
    10, 10, 0, 0, 0, 1,
    -10, 10, 0, 0, 0, 1,
    -10, -10, 0, 0, 0, 1,
    10, 10, 0, 0, 0, 1,
    -10, 10, 0, 0, 0, 1,
    10, -10, 0, 0, 0, 1,
};

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

glVertexPointer(3, GL_FLOAT, sizeof(plane[0])*6, &plane[0]);
glNormalPointer(3, GL_FLOAT, sizeof(plane[0])*6, &plane[3]);

glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glDrawArrays(GL_TRIANGLES, 0, (sizeof(plane) / sizeof(plane[0]))/6);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

И это должно нарисовать красную плоскость. Разница лишь в том, что вы захотите скорректировать свой массив из определения вашего объекта. Вы также можете включить информацию о цвете для каждой вершины и просто включить glColorPointer в коде выше и glEnableClientState (GL_COLOR_ARRAY).

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