【问题标题】:Draw lines using mouse clicks OPENGL使用鼠标点击画线 OPENGL
【发布时间】:2021-04-29 10:49:31
【问题描述】:

我正在尝试使用鼠标单击在 opengl 中绘制线条,但每次单击坐标 (0, 0) (左角)之间的一条线并绘制实际的鼠标单击时。我只想在点击之间绘制线条。这是鼠标功能:

int i = 0, x[50], y[50];

void mouse(int button, int state, int mousex, int mousey)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_UP)
    {
        x[i] = mousex;
        y[i] = 480 - mousey;

        i++;

    }

    else if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)//undo(clear)the drawing
    {
        glClearColor(1, 1, 1, 0);
        glClear(GL_COLOR_BUFFER_BIT);
    }
    glutPostRedisplay();
}

下面我有绘制实际线条的显示功能和主要功能:

void display(void)
{
    glColor3f(1, 0, 1); 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, 640.0, 0.0, 480.0);

    for (int k = 0; k <= i; k++)
    {
        glBegin(GL_LINES);
            glVertex2f(x[k], y[k]);
            glVertex2f(x[k + 1], y[k + 1]);
        glEnd();

    }
    glFlush();     // flushes the frame buffer to the screen
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitWindowSize(640, 480);   
    glutInitWindowPosition(10, 10); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutCreateWindow("Line Drawing");

    glClearColor(1, 1, 1, 0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}

这是我点击 3 次时所绘制的内容,例如:

【问题讨论】:

    标签: c++ opengl glut


    【解决方案1】:

    改变这个

    for (int k = 0; k <= i; k++) // CAREFUL -- there are i points
    {
        glBegin(GL_LINES);
            glVertex2f(x[k], y[k]);
            glVertex2f(x[k + 1], y[k + 1]);  // CAREFUL k+1 = i+1 in last iteration
        glEnd();
    
    }
    

    到这里

    glBegin(GL_LINE_STRIP);
    for (int k = 0; k < i; k++) 
    {                           
            glVertex2f(x[k], y[k]);
    }
    glEnd();
    

    您将多余的行返回到 (0,0) 的原因是您引用了缓冲区中的 ith 和 (i+1)th 元素,这些元素超出了记录点的末尾并且是静态初始化的归零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多