Как нарисовать куб без индексов?OpenGL ES 2.0

Я хочу нарисовать куб без индексов и используя VBO. Я ничего не могу найти в интернете (учебники, примеры). Что я пробовал:

const GLfloat Vertices[] = {
    -1.0f, -1.0f, 1.0f, //Vertex 0
    1.0f, -1.0f, 1.0f,  //v1
    -1.0f, 1.0f, 1.0f,  //v2
    1.0f, 1.0f, 1.0f,   //v3

    1.0f, -1.0f, 1.0f,  //...
    1.0f, -1.0f, -1.0f,         
    1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, -1.0f,

    1.0f, -1.0f, -1.0f,
    -1.0f, -1.0f, -1.0f,            
    1.0f, 1.0f, -1.0f,
    -1.0f, 1.0f, -1.0f,

    -1.0f, -1.0f, -1.0f,
    -1.0f, -1.0f, 1.0f,         
    -1.0f, 1.0f, -1.0f,
    -1.0f, 1.0f, 1.0f,

    -1.0f, -1.0f, -1.0f,
    1.0f, -1.0f, -1.0f,         
    -1.0f, -1.0f, 1.0f,
    1.0f, -1.0f, 1.0f,

    -1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f,           
    -1.0f, 1.0f, -1.0f,
    1.0f, 1.0f, -1.0f,
};


glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
 glDrawArrays(GL_TRIANGLE_STRIP, 0, 24);

Но оказывается, что-то странное, а не куб

1 ответ

Решение

Сначала проверьте в вызове glDrawPrimatives, что вы используете GL_QUADS в качестве режима рисования. Все остальное даст странные результаты.

Вы вершины все же хорошо. Они в правильном порядке и в правильных позициях.

РЕДАКТИРОВАТЬ: так как вы не можете использовать четырехугольники, вам придется определять каждый треугольник индивидуально, ваш первый блок будет выглядеть следующим образом:

-1.0f, -1.0f, 1.0f, //v0
1.0f, -1.0f, 1.0f,  //v1
-1.0f, 1.0f, 1.0f,  //v2

-1.0f, 1.0f, 1.0f,  //v2
1.0f, -1.0f, 1.0f,  //v1
1.0f, 1.0f, 1.0f,   //v3

Я настоятельно рекомендую использовать индексы, хотя, если вы сохраняете тот же буфер вершин, который вы определили, вы можете настроить свои индексы следующим образом:

byte indices[6 * 6];
int n = 0;
for(int i = 0; i < 4 * 6; i += 4)
{
   indices[n++] = i;
   indices[n++] = i + 1;
   indices[n++] = i + 2;

   indices[n++] = i + 2;
   indices[n++] = i + 1;
   indices[n++] = i + 3;
}
Другие вопросы по тегам