2012-03-13 79 views
0

我想通过使用我的鼠标画线。为此,我使用了一个缓冲对象。在OpenGL中使用缓冲区绘制东西

我想存储鼠标单击位置的位置坐标作为这些行的顶点。这些顶点被存储在我创建的数组变量中,但这些线不会被绘制。

以下是重要的代码:

typedef struct { 
float x; 
float y; 
} vec2; 

vec2 hotSpot[1000]; 

热点是我存储顶点值可变。缓冲区已经被初始化为例如:

glBufferData(GL_ARRAY_BUFFER, sizeof(hotSpot), NULL, GL_STATIC_DRAW); 

在小鼠()函数,我存储在热点的坐标,每当我点击的值。据我所知,main()函数总是在一个循环中。因此,这是我写在main()函数:

glBufferData(GL_ARRAY_BUFFER, 0, sizeof(hotSpot), &hotSpot); 

然后在显示屏()函数,这是我做的:

glClear(GL_COLOR_BUFFER_BIT); 
glDrawArrays(GL_LINES, 0, 2); 
glFlush(); 

我是不是走错了地方?

+3

文章[一个完整的,最小的程序,演示了这个问题](http://sscce.org/)。 – genpfault 2012-03-13 01:45:32

回答

0

据我所知,main()函数总是在一个循环中。

不,主函数不循环。当然你的程序有一个事件循环,通常被称为“主事件循环”,但这不是绑定到“主”功能。

对你来说更好的方法不是重新上传整个缓冲区,而是使用glBufferSubData`来更新缓冲区上标记下一个鼠标位置的条目。这也可以让你在你的程序中去掉那个大的静态缓冲区。您只需创建一个合适大小的缓冲区对象并进行一些簿记(缓冲区的大小,当前存储的点击次数)。