在OpenGL中使用缓冲区绘制一些东西

时间:2012-03-13 01:04:25

标签: c++ opengl netbeans

我想用鼠标绘制线条。为此,我使用缓冲对象。

我正在尝试存储鼠标单击位置的位置坐标,作为这些线的顶点。这些顶点存储在我创建的数组变量中,但未绘制线条。

以下是重要的代码:

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

vec2 hotSpot[1000];

hotSpot是我存储顶点值的变量。缓冲区已初始化为:

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

在mouse()函数中,每当我点击时,我都会在hotSpot中存储坐标值。据我所知,main()函数始终处于循环中。这就是我在main()函数中编写的内容:

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

然后在display()函数中,这就是我所做的:

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

我在某个地方出错了吗?

1 个答案:

答案 0 :(得分:0)

  

据我所知,main()函数始终处于循环中。

不,主要功能不循环。当然你的程序有一个事件循环,通常称为“主事件循环”,但这与“main”函数无关。

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