【发布时间】:2014-08-22 00:16:40
【问题描述】:
我开始学习 OpenGL (3.3+),现在我正在尝试做一个在屏幕上随机绘制 10000 个点的算法。 问题是我不知道在哪里做算法。由于它们是随机的,我不能在 VBO 上声明它们(或者我可以吗?),所以我正在考虑将统一值传递给具有不同位置的顶点着色器(我会做一个循环来改变统一值)。然后我会做 10000 次操作。我还会将随机颜色值传递给着色器。
这是我的想法:
#version 330 core
uniform vec3 random_position;
uniform vec3 random_color;
out vec3 Color;
void main() {
gl_Position = random_position;
Color = random_color;
}
通过这种方式,我会在着色器之外进行计算,然后将它们传递给制服,但我认为更好的方法是在顶点着色器中进行计算。那是对的吗?
【问题讨论】:
-
嗯,您仍然需要绘制一些东西才能执行顶点着色器。所以我想你总是可以绘制相同的对象(也许只是一个点?)来让 VS 运行,然后使用随机位置。这样做你基本上可以通过统一的 var 更新来交换 VBO 更新。
-
在主循环中,我会执行 glDrawArrays(GL_POINTS, 0, 1) 之类的操作,并对使用统一变量更新的每个随机位置执行此操作
-
是的,这可能会起作用,但我怀疑它会比更新 VBO 更快,因为大量的绘制调用和统一的 var 更新......
-
如何更新 vbo?抱歉这个菜鸟问题
标签: opengl glsl vertex-shader