【问题标题】:drawing program with glut/openGL not working带有 glut/openGL 的绘图程序不起作用
【发布时间】:2021-11-19 03:11:07
【问题描述】:

这个程序能够创建一个窗口并在我的鼠标在窗口上时定位它,但是显示功能似乎确实有效。我在这里错过了什么?

float pointSize = 10.0f;
bool leftBottState;
float xvalue;
float yvalue;


void init()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
}

void dots()
{
    glBegin(GL_POINTS);
    glVertex3f(xvalue, yvalue, 0.0);

}


void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1, 0, 1);
    dots();
    glEnd();
    glFlush();
    

}
void mouse(int button, int state, int x, int y)
{
    y = 600 - y;
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
        leftBottState = true;
    }
    else
    {
        leftBottState = false;
    }
}

void motion(int x, int y) 
{   
    if (leftBottState) 
    {
        std::cout << "LEFt bUTTON " << std::endl;
        xvalue = x;
        yvalue = y;
        glutPostRedisplay();
    }
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowSize(600, 600);
    glutCreateWindow("test");   
    glutMotionFunc(motion);
    glutDisplayFunc(display);   
    glutMouseFunc(mouse);
    glutMainLoop();

    return(0);                  
}

【问题讨论】:

    标签: c++ opengl glut


    【解决方案1】:

    您正在使用双缓冲窗口(请参阅glutInitDisplayMode)。

    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    

    因此您必须在渲染场景后调用glutSwapBuffers 来交换缓冲区:

    void dots()
    {
        glBegin(GL_POINTS);
        glVertex3f(xvalue, yvalue, 0.0);
        glEnd();
    }
    
    void display(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1, 0, 1);
        dots();
     
        // glFlush();
        glutSwapBuffers();
    }
    

    注意,glBegin \ glEnd 序列界定了图元的顶点。我建议在指定顶点之前和之后立即在同一函数中调用此指令。

    glClear 清除缓冲区,从而清除整个场景。如果要永久绘制点,则必须从display 函数中删除glClear 指令。

    glClear(GL_COLOR_BUFFER_BIT);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2011-12-22
      相关资源
      最近更新 更多