Я пытаюсь смоделировать объект, описанный в файле WRL (VRML), с использованием OpenGL.
Я не очень заинтересован в разборе файла, я полагаю, что эта часть будет довольно простой.На этом этапе я просто пытаюсь жестко закодировать в массиве вершин и индексном массиве, чтобы я мог хорошо понять, как это работает, чтобы я мог обобщить для любого входного файла WRL.
Ясначала пробуем базовую модель прямоугольной призмы.В настоящее время у меня есть этот массив вершин:
GLfloat vertices[] = {
-0.200000, -0.025000, -0.050000,
-0.200000, -0.025000, 0.050000,
-0.200000, 0.025000, -0.050000,
-0.200000, 0.025000, 0.050000,
0.200000, -0.025000, -0.050000,
0.200000, -0.025000, 0.050000,
0.200000, 0.025000, -0.050000,
0.200000, 0.025000, 0.050000
};
и индексный массив:
GLubyte indices[] = {
7, 3, 5, -1, 5, 3, 1, -1,
6, 2, 7, -1, 7, 2, 3, -1,
4, 0, 6, -1, 6, 0, 2, -1,
5, 1, 4, -1, 4, 1, 0, -1,
2, 0, 3, -1, 3, 0, 1, -1,
4, 6, 5, -1, 5, 6, 7, -1
};
, который поступил непосредственно из файла WRL Coordinate3 {point []}
и IndexedFaceSet {coordIndex []}
.
Затем я включаю функциональность массива вершин, вызывая:
glEnableClientState(GL_VERTEX_ARRAY);
и настраиваю glVertexPointer:
glVertexPointer(3, GL_FLOAT, 0, vertices);
наконец я используюФункция glDrawElements для рисования поля:
glDrawElements(GL_POLYGON, 24, GL_UNSIGNED_BYTE, indices);
и затем деактивация функциональности массива вершин:
glDisableClientState(GL_VERTEX_ARRAY);
Так что после этого я быожидаем, что будет нарисован прямоугольник, и когда я использую glDrawElements(GL_POINTS, 24, GL_UNSIGNED_BYTE, indices);
, он показывает 8 вершин, как и предполагалось, что, если бы правильные вершины были соединены линиями, представляло бы ожидаемый прямоугольник (за исключением того, что в середине есть точка, но когдаЯ использую 26 в качестве аргумента подсчета, затем точка в середине исчезает)
Однако, когда я использую GL_POLYGON или GL_LINE_LOOP в качестве первого аргумента для glDrawElements, я получаю мусор.8 вершин, очевидно, есть, но они соединены очень странными способами.
Я сейчас довольно смущен, и я даже не уверен, что делаю это правильно.Возможно, кто-то мог бы поставить меня в правильном направлении, по крайней мере?