永发信息网

opengl 用菜单改变背景颜色 菜单选择完背景后不能马上改变颜色 要等到下个操作后才改变颜色 怎么解决

答案:2  悬赏:10  手机版
解决时间 2021-02-06 08:39
#include
#include
#include
#include
static GLsizei iMode = 1;
void mydisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

switch(iMode){

case 1:
glColor3f(1.0, 0.0, 0.0);break;
case 2:
glColor3f(0.0, 0.0, 1.0);break;
case 3:
glColor3f(0.0, 1.0, 0.0);break;
case 4:
glClearColor(1.0, 1.0, 0.0, 1.0); break;
case 5:
glClearColor(0.0, 1.0, 1.0, 1.0); break;
case 6:
glClearColor(1.0, 0.0, 1.0, 1.0); break;
case 7:
glLineStipple(1,0xFFFF);break;
case 8:
glLineStipple(1,0xF0F0);break;
case 9:
glLineStipple(1,0x000F);break;
case 10:
glLineWidth(1);break;
case 11:
glLineWidth(2);break;
case 12:
glLineWidth(4);break;
case 13:
exit(0) ;break;
}
glBegin(GL_LINE_STRIP);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.6);
glVertex2f(0.9, 0.5);
glVertex2f(0.5, -0.5);
glVertex2f(-0.5, -0.5);
glEnd();
glFlush();
}
void init()
{
glClearColor (0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
//glPointSize(3);
glLineWidth(4); //设置线的大小
glEnable(GL_POINT_SMOOTH); //反走样
glEnable(GL_LINE_STIPPLE); //启动下面的函数
glLineStipple(1,0x0F0F); //线段
}
void ProcessMenu(int value)
{
iMode = value;
glutPostRedisplay();
}
int main(int argc, char** argv)
{
glPolygonMode(GL_FRONT,GL_FILL);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("菜单");

int menu1= glutCreateMenu(ProcessMenu);
glutAddMenuEntry("红色",1);
glutAddMenuEntry("蓝色",2);
glutAddMenuEntry("绿色",3);
int menu2= glutCreateMenu(ProcessMenu);
glutAddMenuEntry("黄色",4);
glutAddMenuEntry("绿色",5);
glutAddMenuEntry("紫色",6);
int menu3= glutCreateMenu(ProcessMenu);
glutAddMenuEntry("直线",7);
glutAddMenuEntry("虚线1",8);
glutAddMenuEntry("虚线2",9);
int menu4= glutCreateMenu(ProcessMenu);
glutAddMenuEntry("线宽1",10);
glutAddMenuEntry("线宽2",11);
glutAddMenuEntry("线宽3",12);
int mainmenu = glutCreateMenu(ProcessMenu); //创建主菜单
glutAddSubMenu("颜色",menu1);
glutAddSubMenu("背景颜色",menu2);
glutAddSubMenu("线型",menu3);
glutAddSubMenu("线宽",menu4);
glutAddMenuEntry("退出",13);
glutAttachMenu(GLUT_RIGHT_BUTTON);

glutDisplayFunc(mydisplay);

init();
glutMainLoop();
return 0;
}
最佳答案
因为你用错函数了。CASE后的函数都改成glClearColor()这个就好了
全部回答
操作下马上flush()? 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
双语potplayer怎样转换
赵敏的父亲是什么王
如图,将矩形ABCD纸片沿对角线BD折叠,使点C
小车空调散热器用什么胶能补漏
I'm tired怎样改成否定句和一般疑问句
骨革的意思是什么啊?知道的请说下!
请问一下有客人在酒楼吃饭,结账的时候少买了
一级公路和二级公路怎么区分?浙江境内的01省
上次甲午年到这次甲午年相距多少年
ff7cc安吉尔离开神罗的原因
陌陌狼人杀无线玩不了,但是用自己流量就能玩
小艳的意思是什么啊?知道的请说下!
在其他条件不变的情况下,工资率下降所产生的
啊组词有哪些词语
山西省祁县邮政编码是多少?
推荐资讯
真心求助 女朋友想跟我分手 我真的爱她 想挽
乌克兰你好汉语怎么说
洋前我想知道这个在什么地方
有机物的密度与水的关系(越详细越好)顺便问
游倅的意思是什么啊?知道的请说下!
含睇的意思是什么啊?知道的请说下!
我女朋友被车撞了头部受伤缝针了,我该买什么
请问ubuntu管理员密码忘记?
如何从iOS11降级到iOS10,苹果官网大神教
魅力曲线美发沙龙地址在哪,我要去那里办事
日照市阳普太阳能节能设备厂地址有知道的么?
全天有多少个星座
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?