我正在创建一个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中的变量应该是最近的。
答案 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库,一些函数回调或消息处理程序。