glDrawArrays与glBegin - glEnd渲染

时间:2015-02-20 20:52:10

标签: c++ c opengl gldrawarrays

我开始学习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 个答案:

没有答案