动态改变材质的颜色

问题描述 投票:0回答:1

在调用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);

现在在程序执行期间,我想更改材料的颜色。我有一个键盘功能,可以更改材料的颜色,然后调用glutPostRedisplay():

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

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

c opengl glut
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.