Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何更改在opengl中放入顶点缓冲区的值数量?_C++_Arrays_Opengl - Fatal编程技术网

C++ 如何更改在opengl中放入顶点缓冲区的值数量?

C++ 如何更改在opengl中放入顶点缓冲区的值数量?,c++,arrays,opengl,C++,Arrays,Opengl,我最近一直在通过上的教程学习opengl,但我遇到了一个问题,即放置到GLbufferdata中的数组必须具有在初始化时声明的固定大小。然而,在我的程序中,我想让动态数量的对象(通过列表完成)在屏幕上显示参数 我成功地编写了代码,从对象中获取数据,并将其转换为VBO的浮点数组和EBO的整数数组,但这些数组似乎无法改变大小,因此,虽然我的程序可以根据要开始的对象数量将数组设置为正确的大小,但我不能重新声明数组,这意味着如果我想添加更多对象,它们将不会被渲染 当然,我可以将阵列设置为比需要的大,但这

我最近一直在通过上的教程学习opengl,但我遇到了一个问题,即放置到GLbufferdata中的数组必须具有在初始化时声明的固定大小。然而,在我的程序中,我想让动态数量的对象(通过列表完成)在屏幕上显示参数

我成功地编写了代码,从对象中获取数据,并将其转换为VBO的浮点数组和EBO的整数数组,但这些数组似乎无法改变大小,因此,虽然我的程序可以根据要开始的对象数量将数组设置为正确的大小,但我不能重新声明数组,这意味着如果我想添加更多对象,它们将不会被渲染

当然,我可以将阵列设置为比需要的大,但这似乎效率低下,并且避免了这个问题

顺便说一句,谢谢你的帮助:)


编辑:是指向更精简版本的链接,该版本应有助于更简洁地概述问题。第99/100行是我创建数组的地方,但是编译时没有显示任何内容。

我不确定,但我认为在声明后不能动态更改顶点缓冲区大小(可以删除缓冲区并创建一个具有所需大小的缓冲区)


更好的方法是系统中的每个对象都必须有自己的顶点缓冲区。

您不能使用
new
动态分配数组吗?“不能重新声明数组”是什么意思?只需释放旧内存并分配新内存。问题是,您需要传递一个指向数组的指针,但由于某种原因,该指针不起作用,因此不会绘制任何顶点。然而,我可能做错了,但我不知道怎么做(我设法让普通的定点数组工作得非常好)。然后展示代码,否则很难判断这里出了什么问题。我在主要帖子中链接了它。基本上,我所做的是将顶点数组声明替换为:GLfloat*顶点;顶点=新的GLfloat[allverts.size()];没有产生任何错误,但屏幕上只显示了背景。@Nesou2:您应该将代码的相关部分直接添加到问题中。提供一个.glBufferData调用。如果需要,每个glBufferData调用都会分配内存,因此可以更改buffer@BDL你的意思是我可以调用glBufferData两次吗?第一次我可以为10个对象分配内存,第二次为20个对象分配内存,而不删除缓冲区?我认为这将需要循环通过每个vao并依次绑定它们,然后运行着色器?我想我会列出一个匿名的gluint列表,然后在每个游戏中循环。然后,如果我想删除一个对象,我只需在删除对象时将其从列表中删除即可。是吗?@Nesou2是的。我想是的。@Nesou2要删除某些内容,还需要调用glDeleteBuffers来释放gpu端内存。