Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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,在调用glutMainLoop()之前,我初始化灯光和材质颜色: glShadeModel(GL_FLAT); glMaterialfv(GL_FRONT, GL_AMBIENT, (const GLfloat[]){1,0.2,0} ); glMaterialfv(GL_FRONT, GL_DIFFUSE, (const GLfloat[]){1,0.6,0} ); glMaterialfv(GL_FRONT, GL_SPECULAR, (const GLfloat[]){1,0.8,0}

在调用glutMainLoop()之前,我初始化灯光和材质颜色:

glShadeModel(GL_FLAT);

glMaterialfv(GL_FRONT, GL_AMBIENT, (const GLfloat[]){1,0.2,0} );
glMaterialfv(GL_FRONT, GL_DIFFUSE, (const GLfloat[]){1,0.6,0} );
glMaterialfv(GL_FRONT, GL_SPECULAR, (const GLfloat[]){1,0.8,0} );
glMaterialfv(GL_FRONT, GL_SHININESS, (const GLfloat[]){1,1,0} );

glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat[]){1,1,1});
glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat[]){1,1,1});
glLightfv(GL_LIGHT0, GL_SPECULAR, (const GLfloat[]){1,1,1});

glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
现在,在程序执行期间,我想更改材质颜色。
我有一个键盘函数,可以更改材质颜色,然后调用GLUTPOSTRESDISPLAY():

但这是个问题,因为如果我调用这个函数,我画的对象就会消失。 所以我画了一个茶壶,但如果我按一个键改变颜色,它就会消失

在调用glutMainLoop()之前,我初始化灯光和材质颜色

错误的方法。OpenGL未初始化。这是一个基于状态的绘图机,您应该在绘制需要该状态的内容之前设置每个状态。这也意味着您不需要将OpenGL操作放入用户交互和事件处理程序中。在需要时,将所有内容都放在绘图代码中,放在需要的位置

glMaterialfv(GL_FRONT, GL_AMBIENT, (const GLfloat[]){0,0.2,1} );
glMaterialfv(GL_FRONT, GL_DIFFUSE, (const GLfloat[]){0,0.6,1} );
glMaterialfv(GL_FRONT, GL_SPECULAR, (const GLfloat[]){0,0.8,1} );
glMaterialfv(GL_FRONT, GL_SHININESS, (const GLfloat[]){0,1,1} );
glutPostRedisplay();