OpenGL顶点数组初始化
OpenGL vertices array initialisation
我有一个关于 OpenGL 3.0 的问题,为什么当我的顶点数组初始化为
时我无法绘制任何东西
float * vertices;
int size = 100; // size of the vertices array
float * vertices = (float *) malloc (size*sizeof(float));
我已经分配了内存,并将数组中的所有值初始化为 0.0,但看起来我的顶点缓冲区只读取顶点数组的第一个元素。而当我像这样初始化数组时:
float vertices[size];
所有顶点都按预期读取和渲染。
以下是我指定顶点缓冲区并将数据传递到缓冲区的方式:
unsigned int VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STREAM_DRAW);
GLint posAttrib = glGetAttribLocation(ourShader.ID, "aPos");
// iterpreting data from buffer
glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 3* sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
sizeof
没有按照您的预期进行。 sizeof(x)
returns 变量数据类型的大小 x
.
在 int size = 100;
float vertices[size];
的情况下 vertices
的数据类型是 float[100]
并且 sizeof(vertices)
returns 与 sizeof(float)*100
.
如果是float * vertices;
,vertices
的数据类型是float*
,sizeof(vertices)
return是指针数据类型的大小,这指向动态分配的数组,但它 而不是 return 动态内存的大小甚至分配数组的元素数。指针的大小取决于硬件,与sizeof(void*)
相同(通常为4或8)。
sizeof(float) * size
适用于以下两种情况:
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*size, vertices, GL_STREAM_DRAW);
我有一个关于 OpenGL 3.0 的问题,为什么当我的顶点数组初始化为
时我无法绘制任何东西float * vertices;
int size = 100; // size of the vertices array
float * vertices = (float *) malloc (size*sizeof(float));
我已经分配了内存,并将数组中的所有值初始化为 0.0,但看起来我的顶点缓冲区只读取顶点数组的第一个元素。而当我像这样初始化数组时:
float vertices[size];
所有顶点都按预期读取和渲染。
以下是我指定顶点缓冲区并将数据传递到缓冲区的方式:
unsigned int VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STREAM_DRAW);
GLint posAttrib = glGetAttribLocation(ourShader.ID, "aPos");
// iterpreting data from buffer
glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 3* sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
sizeof
没有按照您的预期进行。 sizeof(x)
returns 变量数据类型的大小 x
.
在 int size = 100;
float vertices[size];
的情况下 vertices
的数据类型是 float[100]
并且 sizeof(vertices)
returns 与 sizeof(float)*100
.
如果是float * vertices;
,vertices
的数据类型是float*
,sizeof(vertices)
return是指针数据类型的大小,这指向动态分配的数组,但它 而不是 return 动态内存的大小甚至分配数组的元素数。指针的大小取决于硬件,与sizeof(void*)
相同(通常为4或8)。
sizeof(float) * size
适用于以下两种情况:
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*size, vertices, GL_STREAM_DRAW);