Итак, я могу прочитать вершин, нормалей и индексов, которые мне нужны из файла .ply, и записать их в VBO. Однако я не получаю правильные формы. Кажется, мои индексы отключены.Rendering .ply файлы в OpenGL
Вот мои: Структуры
typedef struct vtx {
float x, y, z;
float nx, ny, nz;
} vtx;
typedef struct Face {
unsigned int count;
unsigned int *vertices;
float nx, ny, nz;
} Face;
typedef struct PLY_vals {
Face **f;
vtx **v;
unsigned int vcount;
unsigned int fcount;
int norms;
float center[3];
} PLY_vals;
Настройка вершин и треугольников:
nindices = ply.fcount * 3;
nvertices = ply.vcount;
pindices = new GLuint[nindices];
plyverts = new Vertex[nvertices];
for (int i = 0; i < nvertices; i++)
{
// Vertices
plyverts[i].location[0] = ply.v[i]->x;
plyverts[i].location[1] = ply.v[i]->y;
plyverts[i].location[2] = ply.v[i]->z;
plyverts[i].location[3] = 1;
// Normals
plyverts[i].normal[0] = ply.v[i]->nx;
plyverts[i].normal[1] = ply.v[i]->ny;
plyverts[i].normal[2] = ply.v[i]->nz;
plyverts[i].normal[3] = 0;
}
// set indices (assumes all faces have 3 vertices
int pos=0;
for (int i = 0; i < nindices/3; i++)
{
pindices[pos++] = ply.f[i]->vertices[0]; // first vertex
pindices[pos++] = ply.f[i]->vertices[1]; // second vertex
pindices[pos++] = ply.f[i]->vertices[2]; // third vertex
}
Это должно быть кролик:
Любая идея? Я предполагаю, что вершины находятся не в правильном порядке, но я проверил, и они, похоже, совпадают.
Кажется, вершины верны, потому что это похоже на форму кролика, что, по моему мнению, неверно, это индексы, поскольку он создает эти огромные треугольники. – Caesar
Попробуйте визуализировать вершины как точки. Это скажет вам, верны ли веры или нет. – bames53
У каждого Лица есть 3 вершины? – usr2564301