glDrawArrays,动态改变正在绘制的点数?

Posted

技术标签:

【中文标题】glDrawArrays,动态改变正在绘制的点数?【英文标题】:glDrawArrays,dynamically change the number of points being drawn? 【发布时间】:2011-04-11 08:45:07 【问题描述】:

我有一个关键功能/事件允许用户减少“numParticles”

   glDrawArrays( GL_POINTS, 0, numParticles );

但仅更改此变量不会更改正在绘制的点数

所以我要修改原来的“顶点”数组?

现在,我添加了

glClear(GL_COLOR_BUFFER_BIT);

我可以看到点数现在正在改变。

但是将“numParticles”减为零后,屏幕上还有点吗?

它似乎也不会影响着色器更新的点?

Code

【问题讨论】:

应该的。您是否在重绘之前刷新显示,例如使用glClear(GL_COLORBUFFER_BIT)? 请向我们展示整个绘图功能的一些上下文。 Here is all the code 【参考方案1】:

您的标题中有错误:

static int numParticles = 50000;

这将为每个对象(文件)创建局部变量,然后对象 draw.o 将拥有自己的变量,ogl2particle.o 不会更改。 相反,您应该使用:

extern int numParticles = 50000;

在任何但只有一个文件中:

int numParticles = 50000;

您可以在 http://en.wikipedia.org/wiki/External_variable 阅读有关 c 中全局变量的信息

【讨论】:

以上是关于glDrawArrays,动态改变正在绘制的点数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 glDrawArrays 没有绘制我存储的点?

使用 glDrawArrays() 时如何获取 VBO 的长度以渲染所有顶点?

glDrawArrays 仅在原点绘制一个点(在 ubuntu 上带有 glut 的 OpenGL)

尝试从帧缓冲区传递纹理会导致 L_INVALID_OPERATION:glDrawArrays:绘制的源纹理和目标纹理相同

使用 glDrawArrays 绘制多个模型

我应该使用几个 glDrawArrays() 还是将所有顶点收集到一个大 glDrawArrays 调用?