Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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++ 如何仅在从菜单中选择时绘制矩形?_C++_Opengl_Glut - Fatal编程技术网

C++ 如何仅在从菜单中选择时绘制矩形?

C++ 如何仅在从菜单中选择时绘制矩形?,c++,opengl,glut,C++,Opengl,Glut,我正在写一个程序,当并且仅当用户在菜单中选择矩形时,才使用鼠标绘制矩形,如果用户未选择,则不会绘制矩形。到目前为止,我已经成功地用鼠标绘制了矩形,现在我如何创建一个菜单,以便用户可以选择绘制矩形?这是我的节目: struct Position { Position() : x(0), y(0) {} float x, y; }; Position start, finish; void mouse(int button, int state, int x, int y) {

我正在写一个程序,当并且仅当用户在菜单中选择矩形时,才使用鼠标绘制矩形,如果用户未选择,则不会绘制矩形。到目前为止,我已经成功地用鼠标绘制了矩形,现在我如何创建一个菜单,以便用户可以选择绘制矩形?这是我的节目:

struct Position
{
    Position() : x(0), y(0) {}
    float x, y;
};
Position start, finish;

void mouse(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
        start.x = finish.x = x;
        start.y = finish.y = y;
    }
    if (button == GLUT_LEFT_BUTTON && state == GLUT_UP)
    {
        finish.x = x;
        finish.y = y;
    }
    glutPostRedisplay();
}

void motion(int x, int y)
{
    finish.x = x;
    finish.y = y;
    glutPostRedisplay();
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    double w = glutGet(GLUT_WINDOW_WIDTH);
    double h = glutGet(GLUT_WINDOW_HEIGHT);
    glOrtho(0, w, h, 0, -1, 1);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glPushMatrix();
    glBegin(GL_LINE_LOOP);
    glVertex2f(start.x, start.y);
    glVertex2f(finish.x, start.y);
    glVertex2f(finish.x, finish.y);
    glVertex2f(start.x, finish.y);
    glEnd();
    glPopMatrix();

    glutSwapBuffers();
}

void menu(int choice)
{
    switch (choice)
    {
    case 1:
        // What to write in here?
        break;
    }
    glutPostRedisplay();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(640, 480);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("");
    
    glutCreateMenu(menu);
    glutAddMenuEntry("Rectangle", 1);
    glutAttachMenu(GLUT_RIGHT_BUTTON);

    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutDisplayFunc(display);

    glutMainLoop();
}

添加一个变量,该变量指示必须绘制的形状:

int-shape=0;
菜单中设置变量:

void菜单(int选项)
{
开关(选择)
{
案例1:
形状=1
打破
}
再发现();
}
根据
形状绘制场景

void display()
{
glClear(GLU颜色缓冲位);
glMatrixMode(GL_投影);
glLoadIdentity();
双w=glutGet(GLUT\U窗口\U宽度);
双h=glutGet(GLUT\U窗口\U高度);
格洛托(0,w,h,0,-1,1);
glMatrixMode(GLU模型视图);
glLoadIdentity();
如果(形状==1)
{
glPushMatrix();
glBegin(GL_线_环);
glVertex2f(start.x,start.y);
glVertex2f(finish.x,start.y);
glVertex2f(finish.x,finish.y);
glVertex2f(开始x,结束y);
格伦德();
glPopMatrix();
}
glutSwapBuffers();
}