Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 鼠标输入未显示openGL/Glut绘制的线_C++_Opengl_Glut - Fatal编程技术网

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如果使用实际坐标不起作用,请参考问题的注释。根据投影矩阵规范化坐标