C++ 使用动态数组和缓冲区对象绘制
我在创建顶点数组和索引数组时遇到问题。我不知道代码的真正问题是什么,但我猜是数组类型的问题,有人能告诉我这一点吗C++ 使用动态数组和缓冲区对象绘制,c++,opengl,graphics,vertex-buffer,vertex-array,C++,Opengl,Graphics,Vertex Buffer,Vertex Array,我在创建顶点数组和索引数组时遇到问题。我不知道代码的真正问题是什么,但我猜是数组类型的问题,有人能告诉我这一点吗 #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 GLu
#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;
}
我把剩下的代码放在另一个函数中,这个函数在程序开始时调用。但问题仍然存在
编辑2:
在中发现问题
glBufferData(GL_数组_缓冲区、sizeof(squareVerts)、squareVerts、GL_静态_绘图)
sizeof(squareVerts)应该是sizeof(GLfloat)*x,与索引相同。您得到了具体的错误吗?你能更准确地描述问题是什么吗?Display()函数可能不是处理顶点数据的最佳方法,以防你希望帧速率正常工作。display()函数中的数据应该是常量。仍在尝试找到解决方案。这仅在我不在数组中生成数据时有效。如果我只是手动输入数据,就可以了。但是我需要一个函数来生成执行中的数组,任何人都可以帮助我????
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();
}