如果是OpenGL内部的语句

时间:2013-04-15 00:43:12

标签: qt opengl

我正在创建一个OpenGL项目,在单击OpenGL视图时绘制一个正方形。

这是我在鼠标点击时创建方块的逻辑:

 if (mouseXPosition != 0 && mouseYPosition != 0 ){
glBegin(GL_POLYGON);
    glVertex2f(mouseXPosition, (mouseYPosition + 30));
    glVertex2f((mouseXPosition + 30), mouseYPosition);
    glVertex2f(mouseXPosition, (mouseYPosition - 30));
    glVertex2f((mouseXPosition) -30, mouseYPosition);
glEnd();
 }

我认为这里不需要我的其余代码,但是如果是的话我会添加它。 mouseXPosition和mouseYPostion只是包含OpenGL视图内部位置的浮点数。只要单击视图以显示新位置,它们就会更改。我知道这些位置是正确的,因为无论何时单击视图,我都会将它们打印出来。

当我运行代码时,没有编译错误,但单击鼠标时不会绘制方形。是否存在禁止OpenGL绘图中的陈述的内容?如果没有,有人可以向我解释我做错了什么。

添加信息:

我正在为这个项目使用的窗口系统是Qt,我不认为这会影响这个项目的结果。对于那些Qt Gurus:我在设置变量时调用updateGL(),因此OpenGL中的变量应该是最近的。

2 个答案:

答案 0 :(得分:3)

你只能在update()函数的opengl上下文中进行opengl调用 - 在鼠标处理程序中你需要设置某种标志然后把这个if语句放在update()中

答案 1 :(得分:1)

bool isClicked = false;

update()
{
    if (mouse_was_clicked)
      isClicked = true;
    if (mouse_was_released)
      isClicked = false;
}

render() {
    ...
    if (isClicked == true) {
         // your code for drawing rectangle...
    }
    ...
}

用于检测鼠标是否被单击或释放使用您的Gui库,一些函数回调或消息处理程序。