Почему моя стрелка рисуется не в ту сторону?

#c #opengl-es #2d #vertices

#c #opengl-es #2d #вершины

Вопрос:

У меня есть этот код для рисования стрелки:

   const GLfloat vertices[] = {
    -0.25f,  -0.25f,
      0.0f,    0.0f,
      0.25f, -0.25f,
      0.0f,    0.5f,
  };
  glVertexPointer(2, GL_FLOAT, 0, vertices);
  glEnableClientState(GL_VERTEX_ARRAY);
  glColor4f(0.0f, 0.5f, 0.0f, 1.0f);

  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
  

Она должна выглядеть примерно так:
хорошая стрелка

Это фактический результат (который нежелателен):
неправильная стрелка

Я не вижу, что я сделал неправильно, вершины кажутся мне правильными, но, похоже, OpenGL рисует многоугольник в другом порядке, чем я указал. Кто-нибудь может мне помочь? Заранее спасибо. 🙂

Ответ №1:

Ваша треугольная полоса сначала занимает нижние три точки (то есть нижнюю часть вашей зеленой стрелки), а затем правые три точки. Просто измените порядок точек в вашем определении:

 const GLfloat vertices[] = {
  -0.25f,  -0.25f,
  0.0f,    0.0f,
  0.0f,    0.5f,
  0.25f, -0.25f,
};
  

Комментарии:

1. Это сработало, но я не понимаю, почему OpenGL использует такой порядок. Я соглашусь, когда мне будет позволено.

2. @Radek S: В общем случае треугольная полоса начинается с первых трех, а затем удаляет первую и добавляет следующую и так далее. Треугольная полоса с четырьмя точками (A, B, C, D) рисует треугольники (A, B, C) и (B, C, D).