C++ 鼠标输入未显示openGL/Glut绘制的线
我试图根据鼠标输入坐标画一条线 但是,以下代码编译后,不会显示鼠标输入的行C++ 鼠标输入未显示openGL/Glut绘制的线,c++,opengl,glut,C++,Opengl,Glut,我试图根据鼠标输入坐标画一条线 但是,以下代码编译后,不会显示鼠标输入的行 int coord_1[2]; //(x,y) of first point for line int coord_2[2]; //(x,y) of second point for line bool ready_1=false; bool ready_2=false; void drawLine() { glBegin(GL_LINES); glColor3f(1.0, 0.0, 0.0);
int coord_1[2]; //(x,y) of first point for line
int coord_2[2]; //(x,y) of second point for line
bool ready_1=false;
bool ready_2=false;
void drawLine()
{
glBegin(GL_LINES);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(coord_1[0], coord_1[1]);
glVertex2f(coord_2[0], coord_2[1]);
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1,1,-1,1,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if(ready_1 && ready_2)
{
drawLine();
ready_1 = ready_2 = false;
}
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
switch (button)
{
case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN) //button pressed down
{
//only do something on release
}
if (state == GLUT_UP) //released button
{
cout << "right button up" << endl;
}
break;
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) //button pressed down
{
coord_1[0]=x;
coord_2[1]=y;
cout << "first pos" << endl;
ready_1=true;
}
if (state == GLUT_UP) //released button
{
coord_2[0]=x;
coord_2[1]=y;
cout << "second pos" << endl;
ready_2=true;
}
break;
default:
break;
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA|GLUT_MULTISAMPLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(512,512);
glutCreateWindow("Asn 1");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMouseFunc(mouse);
glutKeyboardFunc(processNormalKeys);
// GLUT main loop
glutMainLoop();
return(0);
}
int-coord_1[2]//直线第一点的(x,y)
国际合作2[2]//直线第二点的(x,y)
bool ready_1=假;
bool ready_2=假;
虚线
{
glBegin(GL_行);
GL3F(1.0,0.0,0.0);
glVertex2f(coord_1[0],coord_1[1]);
glVertex2f(coord_2[0],coord_2[1]);
格伦德();
}
作废显示(作废)
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-1,1,-1,1,-1,1);
glMatrixMode(GLU模型视图);
glLoadIdentity();
if(就绪\u 1和就绪\u 2)
{
抽绳();
ready_1=ready_2=false;
}
glutSwapBuffers();
}
无效鼠标(int按钮、int状态、int x、int y)
{
开关(按钮)
{
案例过量右按钮:
if(state==GLUT\u DOWN)//按钮按下
{
//只在发布时做一些事情
}
if(state==GLUT\u UP)//释放按钮
{
cout您可能会绘制线,但由于随后重置了绘制条件,因此在下一个绘制步骤中会隐藏线(这可能非常快)
删除ready\u 1=ready\u 2=false;
,该行应保持可见。
相反,当您收到一个左键按下事件时,您可以设置ready_2=false
。您在事件处理程序中获得的坐标是否合理?它们是否规范化?这肯定有帮助,现在在drawLine()中输入虚拟数据后,线条显示出来,谢谢。@user3291299如果使用实际坐标不起作用,请参考问题的注释。根据投影矩阵规范化坐标