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();
}