glDrawArrays против glBegin - рендеринг glEnd

Я начинаю изучать OpenGL; Я попытался отобразить несколько вершин, чтобы отобразить многоугольник. Моя функция отображения завершается успешно, если я использую следующий код:

glBegin(GL_POLYGON);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.5, 0.0, 0.0);
glVertex3f(0.5, 0.5, 0.0);
glVertex3f(0.0, 0.5, 0.0);
glEnd();

Но я не могу отобразить массив вершин с помощью glDrawArrays, Ниже приводится полная программа (разработанная на OS X).

#include <OpenGL/gl.h>
#include <OpenGl/glu.h>

#ifdef __APPLE__
  #include <GLUT/glut.h>
#else
  #include <GL/glut.h>
#endif

#ifdef __APPLE__
  #define glGenVertexArrays glGenVertexArraysAPPLE
  #define glBindVertexArrays glBindVertexArraysAPPLE
  #define glBindVertexArray glBindVertexArrayAPPLE
  #define glDeleteVertexArrays glDeleteVertexArraysAPPLE
#endif

/** Triangle vertices. */
GLuint handleVertex;
const float vertex[] = 
{
  0.75f, 0.75f, 0.0f, 1.0f,
  0.75f, -0.75f, 0.0f, 1.0f,
  -0.75f, -0.75f, 0.0f, 1.0f,
};

static void init_vertices()
{
  glGenBuffers(1, &handleVertex);
  glBindBuffer(GL_ARRAY_BUFFER, handleVertex);
  glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);
  glBindBuffer(GL_ARRAY_BUFFER, 0);
}

static void display()
{
  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  glClear(GL_COLOR_BUFFER_BIT);

  /*glBegin(GL_POLYGON);
  glVertex3f(0.0, 0.0, 0.0);
  glVertex3f(0.5, 0.0, 0.0);
  glVertex3f(0.5, 0.5, 0.0);
  glVertex3f(0.0, 0.5, 0.0);
  glEnd();*/

  glBindBuffer(GL_ARRAY_BUFFER, handleVertex);
  glEnableVertexAttribArray(0);
  glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
  glDrawArrays(GL_TRIANGLES, 0, 3);
  glDisableVertexAttribArray(0);

  glutSwapBuffers();
  glFlush();
}

int main(int argc, char** argv)
{
  glutInit(&argc, argv);

  unsigned displayMode = GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL;
  glutInitDisplayMode(displayMode);
  glutInitWindowSize(500, 500); 
  glutInitWindowPosition(300, 200);
  glutCreateWindow(argv[0]);

  init_vertices();

  glutDisplayFunc(display); 
  glutMainLoop();

  return 0;
}

Мне интересно, что я делаю не так.

0 ответов

Другие вопросы по тегам