Рисование с использованием динамического массива и буферного объекта

У меня проблема при создании массива вершин и массива индексов. Я не знаю, в чем на самом деле проблема с кодом, но я думаю, что-то с типом массивов, может кто-нибудь, пожалуйста, подскажите мне об этом?

#define GL_GLEXT_PROTOTYPES
#include<GL/glut.h>
#include<iostream>
using namespace std;

#define BUFFER_OFFSET(offset) ((GLfloat*) NULL + offset)

const GLuint numDiv = 2;
const GLuint numVerts = 9;
GLuint VAO;

void display(void) {

enum vertex {VERTICES, INDICES, NUM_BUFFERS};

GLuint * buffers = new GLuint[NUM_BUFFERS];

GLfloat (*squareVerts)[2] = new GLfloat[numVerts][2];
GLubyte * indices = new GLubyte[numDiv*numDiv*4];

GLuint delta = 80/numDiv;
for(GLuint i = 0; i < numVerts; i++)
{
squareVerts[i][1] = (i/(numDiv+1))*delta;
squareVerts[i][0] = (i%(numDiv+1))*delta;
}

for(GLuint i=0; i < numDiv; i++){
for(GLuint j=0; j < numDiv; j++){
//cada iteracao gera 4 pontos
#define NUM_VERT(ii,jj) ((ii)*(numDiv+1)+(jj))
#define INDICE(ii,jj) (4*((ii)*numDiv+(jj)))
indices[INDICE(i,j)]   = NUM_VERT(i,j);
indices[INDICE(i,j)+1] = NUM_VERT(i,j+1);
indices[INDICE(i,j)+2] = NUM_VERT(i+1,j+1);
indices[INDICE(i,j)+3] = NUM_VERT(i+1,j);
}
}

glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

glGenBuffers(NUM_BUFFERS, buffers);

glBindBuffer(GL_ARRAY_BUFFER, buffers[VERTICES]);
glBufferData(GL_ARRAY_BUFFER, sizeof(squareVerts),
squareVerts, GL_STATIC_DRAW);
glVertexPointer(2, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState(GL_VERTEX_ARRAY);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[INDICES]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices),
indices, GL_STATIC_DRAW);

glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glDrawElements(GL_POINTS, 16, GL_UNSIGNED_BYTE, BUFFER_OFFSET(0));
glutSwapBuffers();
}

void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
gluOrtho2D((GLdouble) -1.0, (GLdouble) 90.0, (GLdouble) -1.0, (GLdouble) 90.0);
}

int main(int argv, char** argc) {

glutInit(&argv, argc);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("myCode.cpp");
init();
glutDisplayFunc(display);
glutMainLoop();

return 0;
}

Редактировать:

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

void display(void) {

glBindVertexArray(VAO);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glDrawElements(GL_POINTS, 16, GL_UNSIGNED_BYTE, BUFFER_OFFSET(0));
glutSwapBuffers();
}

и я поместил остальную часть кода на дисплее в другую функцию, которая вызывается при запуске программы. Но проблема все еще

edit2:

Нашел проблему в
glBufferData (GL_ARRAY_BUFFER, SizeOf (squareVerts), squareVerts, GL_STATIC_DRAW);

sizeof (squareVerts) должен быть sizeof (GLfloat) * x, то же, что и для индексов.

0

Решение

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

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

Других решений пока нет …

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