我想用鼠标绘制线条。为此,我使用缓冲对象。
我正在尝试存储鼠标单击位置的位置坐标,作为这些线的顶点。这些顶点存储在我创建的数组变量中,但未绘制线条。
以下是重要的代码:
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();
我在某个地方出错了吗?
答案 0 :(得分:0)
据我所知,main()函数始终处于循环中。
不,主要功能不循环。当然你的程序有一个事件循环,通常称为“主事件循环”,但这与“main”函数无关。
一个更好的方法不是重新上载整个缓冲区,而是使用glBufferSubData`来更新标记下一个鼠标位置的缓冲区上的一个条目。这也允许您在程序中取消大型静态缓冲区。您只需创建一个大小合适的缓冲区对象并进行一些簿记(缓冲区大小,当前存储的点击次数)。