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;
}

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

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]