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();
しかし、それは問題です。その関数を呼び出すと、描画したオブジェクトが消えてしまうからです。だから私はティーポットを描きますが、キーを押して色を変えると消えます。