1

我正在创建一个 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 的绘图中是否有禁止 if 语句的东西?如果没有,有人可以向我解释我做错了什么。

添加信息:

我用于这个项目的窗口系统是 Qt,我认为这不会影响这个项目的结果。对于那些 Qt 大师:我在设置变量时确实调用了 updateGL(),因此 OpenGL 内部的变量应该是最新的。

4

2 回答 2

3

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

于 2013-04-15T00:52:12.643 回答
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 库、一些函数回调或消息处理程序。

于 2013-04-15T06:49:43.460 回答